mybatis执行select语句禁用缓存[转帖]_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 7722 | 回复: 0   主题: mybatis执行select语句禁用缓存[转帖]        下一篇 
yun
注册用户
等级:少校
经验:1082
发帖:83
精华:4
注册:2012-12-17
状态:离线
发送短消息息给yun 加好友    发送短消息息给yun 发消息
发表于: IP:您无权察看 2012-12-17 18:24:10 | [全部帖] [楼主帖] 楼主

在mybatis框架中,在SqlSession未关闭之前,在一个session里面,如果执行相同的select语句,mybatis不会重新查询数据库,而是直接返回缓存在内存中的查询结果,这个是与MyBatis的Cache配置无关的,更改配置文件不起作用,要调用SqlSession.clearCache()函数才可以。

一、MyBatis的Cache配置
1、全局开关:默认是true,如果它配成false,其余各个Mapper XML文件配成支持cache也没用。

<settings>
<setting name=”cacheEnabled” value=”true”/>
</settings>


2、各个Mapper XML文件,默认是不采用cache。在配置文件加一行就可以支持cache:

<cache />


3、Mapper XML文件配置支持cache后,文件中所有的Mapper statement就支持了。此时要个别对待某条,需要:

<select id=”inetAton” parameterType=”string” resultType=”integer” useCache=“false”>
select inet_aton(#{name})
</select>


二、注意的几个细节
1、如果readOnly为false,此时要结果集对象是可序列化的。

<cache readOnly=”false”/>


2、在SqlSession未关闭之前,如果对于同样条件进行重复查询,此时采用的是local session cache,而不是上面说的这些cache。

3、MyBatis缓存查询到的结果集对象,而非结果集数据,是将映射的PO对象集合缓存起来。

说意义不大是在于:
a、面对一定规模的数据量,内置的cache方式就派不上用场了;
b、对查询结果集做缓存并不是MyBatis框架擅长的,它专心做的应该是sql mapper。采用此框架的Application去构建缓存更合理,比如采用OSCache、Memcached啥的。

本文来自: mybatis执行select语句禁用缓存




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论