ibatis中使用缓存


一 什么是缓存以及为什么要使用缓存

从数据库读出数据后,该数据在某个缓冲区暂时被保存起来。当我们再次需要读取该数据的时候,直接从该缓冲区中读取,而不用再次访问数据库。我们知道数据库连接是很昂贵的资源,减少对数据库的访问是提高性能的手段之一。

二 Ibatis中使用缓存的配置方法


①SqlMapConfig.xml

<sqlMapConfig>
<settings cacheModelsEnabled="true" />
......
</sqlMapConfig>


②StudentMapper.xml

<sqlMap namespace="student">
<typeAlias alias="student" type="cn.xy.Student" />

<!-- 配置缓存模型 -->
<cacheModel id="stu-cache" type="OSCache" readOnly="true"
serialize="true">
<flushInterval hours="24" />
<flushOnExecute statement="insertStu" />
<flushOnExecute statement="updateStu" />
<flushOnExecute statement="deleteStu" />
<property value="500" name="size" />
</cacheModel>

<resultMap id="StudentMap" class="student">
<result property="id" column="ID" />
<result property="name" column="NAME" />
</resultMap>

<select id="selectAllUser" resultMap="StudentMap" cacheModel="stu-cache">
select * from student
</select>

<insert id="insertStu" parameterClass="student">
insert into student(Id,name) VALUES (#id#, #name#)
</insert>
.......
</sqlMap>

③ java代码使用ibatis就不赘述了


三 缓存标签详解

1 id 一个标识,在下面的select语句中将引用该标识。

2 Type cacheModel的实现类型,目前有如下4种实现:

①MEMORY(com.ibatis.sqlmap.engine.cache.memory.MemoryCacheController)
MEMORY cache实现使用java的软引用类型来管理cache的行为,使用一个HashMap来保存当前需要缓存的数据对象的引用,当内存不足时java虚拟机将回收这些引用,从而清除cache。

②LRU(com.ibatis.sqlmap.engine.cache.lru.LruCacheController)
LRU Cache 实现用“近期最少使用”原则来确定如何从Cache中清除对象,当Cache溢出时,最近最少使用的对象将被从Cache中清除。

③FIFO(com.ibatis.sqlmap.engine.cache.fifo.FifoCacheController)
FIFO Cache实现用先进先出原则来确定如何从 Cache 中清除对象。即最先进入Cache的对象将从Cache中清除。

④OSCACHE(com.ibatis.sqlmap.engine.cache.oscache.OSCacheController)
OSCACHE Cache实现是OSCache2.0缓存引擎的一个Plugin,它具有高度的可配置性,分布式,高度的灵活性(很推荐使用该类型)OSCache可以通过oscache.properties文件进行缓存的相关配置。


3 readOnly readOnly的值表示缓存中的数据对象是否只读。若为true,则当数据对象发生变化时,数据对象就将被从缓存中废除,下次需要重新从数据库读取数据,构造新的数据对象。而若为false,则意味着缓存中的数据对象可更新,不必从数据库中读取。


4 serialize 如果需要全局的数据缓存,CacheModel的serialize属性必须被设为true。否则数据缓存只对当前Session有效,局部缓存对系统的整体性能提升有限。在serialize="true"的情况下,如果有多个Session同时从Cache 中读取某个数据对象,Cache将为每个Session返回一个对象的复本,也就是说,每个Session将得到包含相同信息的不同对象实例。因而Session可以对其从Cache获得的数据进行存取而无需担心多线程并发情况下的同步冲突。


5 <flushInterval hours="24"> 指定多长时间清除缓存,例如指定每24小时强行清空缓存区的所有内容。


6 <flushOnExecute statement="insertStu"/>在执行指定的语句时将刷新数据库。


7 Size 指定Cache的最大容量。

原帖地址:http://hnylj.iteye.com/blog/363066

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值