`
- 浏览:
245532 次
- 性别:
- 来自:
杭州
-
深入iBatis的Cache[转载自javaeye---NetBus 的心得体会]
关键字: ibatis cache
概述
- iBatis对查询结果集进行本地缓存。
- Cache
的key由haskcode、checksum、查询参数、sqlmap
Id、sql语句、调用方法名等构成。由此可以看出,不同的参数会有不同的Key。注意,他不是以查询参数的Class的hashcode或
toString方法作为key的一部分,而是以在sqlmap使用的变量的集合。
- queryForObject和queryForList都可以缓存。其它片断不支持。
- 可以设定为定时刷新或受条件触发刷新Key。如:在执行Update的时候,可以刷新Cache。
刷新Cache时,无法手动控制刷新单条记录。只能刷新该Cache ID的全部Cache。
- 目前有4种Cache实现,但是无法自定义扩展Cache。
- Cache的数量可以指定。
- Cache的put和get方法内有同步,外部无。所以同一参数同时查询时,Cache是不能命中的。在有一个结果put到Cache后,后续查询才能命中。
相关示例代码如下: Xml代码
<cachemodel< font="">
id
="lruCache"
type
="LRU"
serialize
="true"
readOnly
="false"
>
<property< font="">
name
="reference-type"
value
="WEAK"
/>
<flushonexecute< font="">
statement
="insertAccount"
/>
<flushonexecute< font="">
statement
="updateAccount"
/>
<flushonexecute< font="">
statement
="deleteAccountById"
/>
</cachemodel>
<select< font="">
id
="selectAccountById"
parameterClass
="int"
resultClass
="Account"
cacheModel
="lruCache"
>
select ACC_ID as id, ACC_FIRST_NAME as firstName,
ACC_LAST_NAME as lastName, ACC_EMAIL as emailAddress from ACCOUNT where ACC_ID
= #id#
<update< font="">
id
="updateAccount"
parameterClass
="Account"
>
update ACCOUNT set ACC_FIRST_NAME
=#firstName# , ACC_LAST_NAME
= #lastName# , ACC_EMAIL
=#emailAddress# where ACC_ID
= #id#
</update>
<cachemodel
id="lruCache" type="LRU" serialize="true" readonly="false">
<property name="reference-type" value="WEAK"> <flushonexecute
statement="insertAccount"> <flushonexecute
statement="updateAccount"> <flushonexecute
statement="deleteAccountById"> </cachemodel>
<update id="updateAccount" parameterclass="Account"> update
ACCOUNT set ACC_FIRST_NAME=#firstName# , ACC_LAST_NAME = #lastName# ,
ACC_EMAIL =#emailAddress# where ACC_ID = #id# </update>
Cache规则
- Type 目前有4种实现。建议用LRU或者OsCache
- readOnly,表示Cache对象是否只读。False,表示外部更改cache内容无效。
- Serialize,是否序列化。true,表示存贮到cache中的是系列化后的对象。
- 组合:
- readOnly=false, Serialize=false:Cache Session有效。如:1+n时,下次1+n将会失效。 不系列化,外部更改有效。
- readOnly=true, Serialize=false:所有session共享Cache,取出时实例是同一个。不系列化,外部更改有效。默认的
- readOnly=false, Serialize=true:所有session共享Cache,取出时实例不一样,但是内容一样。 系列化,外部更改无效
- readOnly=true, Serialize=true: 同默认效果一样。
- 看得出,主要是通过系列化来保证外部更改属性后不影响其它session的取出的结果。
4种Cache实现
- LRU,最后使用的排到前面。Cache溢出时,最远被使用的就被clear。
- FIFO,先进先出。
- Memory,内存引用。该实现无数量限制。前两种是基于jvm实现。
- WEAK,产生内存回收动作时,失效。
- SOFT,内存不足时,失效。
- STRONG,显式刷新时,失效。
- OsCache(支持分布式)。通过oscahce.properties控制。
适应范围
- 频繁查询,很少更改的内容。如:分类等。
- 1+n查询。n是父类,数据量较少。如:查询Spu信息时,同意需要获得其品类信息。
- 效率低,执行频率高的SQL。如统计一类的SQL。
- 有了Cache机制后,1+n不再可怕。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
apache开源项目源码ibatis-3-core-src-3.0.0.227 ibatis框架java源程序 spring,struts,hibernate,ibatis,框架源码 各种ibatis框架应用源码,你会从中得到意想不到的效果! apache开源组织开发的开源项目源码,其...
ibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zip
ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip
ibatis-3-core-3.0.0.200
iBATIS-SqlMaps-2-Tutorial_cniBATIS-SqlMaps-2-Tutorial_cn.pdf.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdf
Ibatis基本配置---[环境搭建
ibatis-3-core-3.0.0.204 最新官方下载版
ibatic框架最新驱动--------------------
ibatis 开发指南 和 iBATIS-SqlMaps两本图书
iBATIS-3-User-Guide.pdf what is iBATIS? ...........
ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包
flex 整合 spring+struts2+ibatis - 乐的日志 - 网易博客.htm flex 整合 spring+struts2+ibatis - 乐的日志 - 网易博客.htm
一个简单的spring+struts+ibatis整合的实例,实现了用户登录,用户登录成功则显示欢迎信息,失败则显示用户名或密码错误,该实例非常简单基础,特别适合新人学习,工程包含了必要的资源包,部署到服务器中及可运行,...
ibatis-sqlmap ibatis-sqlmap-2 ibatis-sqlmap-2.jar.zip
ibatis-SqlMaps-开发指南-version 1.0; ibatis-SqlMaps-开发指南-version 2
对ibatis-2.3.4.726的改进 1. 物理分页功能,支持cache 2. 读写分离 3. 添加数据库方言,透明支持多种数据库
ibatis2源码与分析
ibatis持久化架包,包含例子、文档、源码
ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园
这个是Ibatis的源代码.