概述
- 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后,后续查询才能命中。
相关示例代码如下:
<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>
<select 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#
</select>
<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不再可怕。
原创文章,需要转载需经本人同意!
分享到:
相关推荐
ibatis学习 ibatis总结 ibatis ibatis ibatis
ibatis资料ibatis资料ibatis资料ibatis资料ibatis资料ibatis资料ibatis资料ibatis资料ibatis资料
深入分析 iBATIS 框架之系统架构与映射原理深入分析 iBATIS 框架之系统架构与映射原理深入分析 iBATIS 框架之系统架构与映射原理深入分析 iBATIS 框架之系统架构与映射原理
ibatis缓存技术详解,详细讲述了ibaits缓存应用于实现。
ibatis demo,ibatis例子,ibatis示例
iBATIS 级联iBATIS 级联iBATIS 级联
ibatis的原码 ibatis源码 ibatis源码 ibatis源码
ibatis
《iBATIS实战》的最后给出了一个设计优雅、层次清晰的示例程序JGameStore,该示例涵盖全书的大部分知识点,可以作为iBATIS学习和Web开发的经典案例,非常值得深入研究。 编辑推荐 《iBATIS实战》既可为广大的开发...
Ibatis3,手册,Ibatis3手册,Ibatis3使用手册,Ibatis3参考手册
学习ibatis必备学习ibatis必备学习ibatis必备学习ibatis必备学习ibatis必备学习ibatis必备学习ibatis必备学习ibatis必备学习ibatis必备学习ibatis必备学习ibatis必备学习ibatis必备
ibatis代码自动生成,ibatis代码自动生成,ibatis代码自动生成,ibatis代码自动生成
ibatis api,ibatis文档,ibatis说明文档
ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南
ibatis教程,ibatis帮助文档,ibatis学习入门
简单的Ibatis入门例子,让你踏入Ibatis大门
Spring与iBATIS的集成 iBATIS似乎已远离众说纷纭的OR框架之列,通常人们对非常流行的Hibernate情有独钟。但正如Spring A Developer's Notebook作者Bruce Tate 和Justin Gehtland所说的那样,与其他的OR框架相比...
ibatis 乱码解决 ibatis乱码 gbk iso_8859_1 乱码
iBatis文档\ibatis.doc