ibatis缓存初探(1)
一,IBATIS 缓存机制使用
1,sqlMapConfig.xml中配置 
1.SqlMapConfig.xml中
<settings
cacheModelsEnabled="true" //设置为true
enhancementEnabled="true"
lazyLoadingEnabled="true"
.............
/>
注意点,k,必须配置settings这个标签,否则
cacheModelsEnabled="false"
cacheModelsEnabled="true" 是默认的,无须配置也可,建议配置
2,配置具体的sqlMap.xml
<cacheModel id="baby-cache" type="LRU" readOnly="false"
serialize="true">
<flushInterval hours="24" />
<flushOnExecute statement="getBabyByParams" />
<property value="600" name="size" />
</cacheModel> <select id="getBabyByParams" resultMap="baby-Result" cacheModel="baby-cache">
select * from Baby
<dynamic prepend="where">
<isPropertyAvailable property="name" prepend="and">
name = #name#
</isPropertyAvailable>
<isPropertyAvailable property="sex" prepend="and">
sex =
#sex,jdbcType=VARCHAR,javaType=com.yajun.enumdemo.SexEnum#
</isPropertyAvailable>
<isPropertyAvailable property="BirthdayBondStart"
prepend="and">
<![CDATA[
birthday >= cast(#BirthdayBondStart# as datetime)
]]>
</isPropertyAvailable>
<isPropertyAvailable property="BirthdayBondEnd"
prepend="and">
<![CDATA[
birthday <= cast(#BirthdayBondEnd# as datetime)
]]>
</isPropertyAvailable>
<isPropertyAvailable property="hobby" prepend="and">
hobby like '%'||#hobby#||'%'
</isPropertyAvailable>
</dynamic>
</select>
二,具体配置项
id : cacheModel的id.
type : cache的类型. ibatis目前提供了LRU,MEMORY,FIFO,OSCACHE这四种.
- FIFO: com.ibatis.sqlmap.engine.cache.fifo.FifoCacheController
- LRU: com.ibatis.sqlmap.engine.cache.fifo.LruCacheController
- MEMORY: com.ibatis.sqlmap.engine.cache.fifo.MemoryCacheController
- OSCACHE: com.ibatis.sqlmap.engine.cache.fifo.OSCacheController
当然,你也可以自己来实现Cache, 你需要做的是让你的Cache类 implements com.ibatis.sqlmap.engine.cache.CacheController.
readOnly : 是否只读. 默认为true, 只读.
serialize : 是否从Cache中读取同一个对象,还是对象的副本.
只有在readOnly=false才有效.
因为Cache是只读的,那么为不同session返回的对象肯定是一个.
只有在Cache是可读写的时候,才需要为每个session返回对象的副本.
flushInterval : Cache刷新间隔. 可以配置hours,minutes,seconds,milliseconds.
注: 不是说,间隔时间到了,在Cache的statement会自己刷新,而是说,在间隔时间过了后,下次的查询
将不会从Cache中直接去值,而会用SQL去查.也就是: 如果,间隔时间过了,还没有Cache对应的statement执行
的话,那么Cache中就会一直是旧的,不用担心Cache数据是旧的,因为下次的查询将会直接从SQL查询,而非Cache,查询的结果也会去更新Cache的值.
flushOnExecute : 当这些statement被执行了,那么下次的查询将会通过SQL去查,同时用查询结果更新Cache.
注: 和flushInterval的刷新一样,不是主动刷新,而是由下次查询来触发被动刷新.
在一个cacheModel中可以指定多个flushOnExecute.
property : 这是针对cacheModel的额外的一些属性配置.不同type的cacheModel将会有自己专有的一些property配置.
FIFO: <property name="size" value="100" />
LRU: <property name="cache-size" value="100" />
MEMORY: <property name="reference-type" value="WEAK" />
ibatis缓存初探(1)的更多相关文章
- iBATIS缓存cacheModel属性浅析
iBATIS缓存cacheModel属性的应用使得在Mapped Statement中缓存常用的数据,那么本文将会给你介绍iBATIS缓存cacheModel属性的信息. AD:2013云计算架构师峰 ...
- WEB缓存初探
WEB缓存初探 概念理解 缓存--缓存就是数据交换的缓冲区(称作Cache) 缓存 的作用说白了就是用来就近获取东西,比如我们会把已经拿到的常用的东西放在手边(与自己相对较近的地方),方便下次需要时去 ...
- SpringCache缓存初探
body,table tr { background-color: #fff } table tr td,table tr th { border: 1px solid #ccc; text-alig ...
- HTTP缓存初探
缓存的作用 用户访问一个web页面的频率远高于web页面更新的频率,因此多数时候用户从服务器获取的html.js.css以及图片等内容都是相同的,如果每次访问都从服务器获取这些静态内容即降低了页面加载 ...
- ibatis缓存配置
一.sqlmapconfig.xml <sqlMapConfig> <settings useStatementNamespaces="true" cacheM ...
- ibatis返回结果映射到HashMap时,列名无效的问题
遇到问题: 1.项目开发过程中在xml配置文件中使用$tableName/sql$时,报"列名无效"错误,后来经过查询,发现是ibatis缓存 了上一次查询的表结构的原因.解决办法 ...
- iBatis --> MyBatis
从 Clinton Begin 到 Google(从 iBatis 到 MyBatis,从 Apache Software Foundation 到 Google Code),Apache 开源代码项 ...
- MyBatis 一级缓存、二级缓存全详解(一)
目录 MyBatis 一级缓存.二级缓存全详解(一) 什么是缓存 什么是MyBatis中的缓存 MyBatis 中的一级缓存 初探一级缓存 探究一级缓存是如何失效的 一级缓存原理探究 还有其他要补充的 ...
- SpringCache - 请求级别缓存的简易实现
前言 在SpringCache缓存初探中我们研究了如何利用spring cache已有的几种实现快速地满足我们对于缓存的需求.这一次我们有了新的更个性化的需求,想在一个请求的生命周期里实现缓存. 需求 ...
随机推荐
- [大牛翻译系列]Hadoop(13)MapReduce 性能调优:优化洗牌(shuffle)和排序阶段
6.4.3 优化洗牌(shuffle)和排序阶段 洗牌和排序阶段都很耗费资源.洗牌需要在map和reduce任务之间传输数据,会导致过大的网络消耗.排序和合并操作的消耗也是很显著的.这一节将介绍一系列 ...
- 加载页面遮挡耗时操作任务页面--第三方开源--AndroidProgressLayout
在Android的开发中,往往有这种需求,比如一个耗时的操作,联网获取网络图片.内容,数据库耗时读写等等,在此耗时操作过程中,开发者也许不希望用户再进行其他操作(其他操作可能会引起逻辑混乱),而此时需 ...
- 通过获取客户端Json数据字符串,反序列化为实体对象的一段代码
#region 保存候选人数据 /// <summary> /// 保存候选人数据 /// </summary> /// <param name="entity ...
- 第29章 项目10:DIY街机游戏
1.问题 "Self-Defense Against Fresh Fruit":军士长指挥自己的士兵使用自我防御战术对抗以石榴.芒果.青梅和香蕉等新鲜水果入侵者.防御战术包括使用枪 ...
- 编写php拓展实例--slime项目(用户登录会话类)
最近公司换了yaf框架,突然对用c实现php拓展感兴趣了,如果一个功能已经很稳定很成熟而且用的地方很多,那么我们就可以尝试用拓展实现(不一定每种情况都可以写成拓展),写成拓展后就不用每次用都包含一 ...
- SVN四部曲之SVN简单使用教程入门
1. 签出源代码到本机 在本机创建文件夹StartKit,右键点击Checkout,弹出如下图的窗体: 2. 2 在上图中URL of Repository:下的文本框中输 ...
- 基础才是重中之重~理解linq中的groupby
linq将大部分SQL语句进行了封装,这使得它们更加面向对象了,对于开发者来说,这是一件好事,下面我从基础层面来说一下GroupBy在LINQ中的使用. 对GroupBy的多字段分组,可以看我的这篇文 ...
- Javascript实例:求数组中最大、最小值及下标
题目:定义一个数组,并给出7个整数,求该数组中的最大值,及最大值下标,最小值及最小值下标.<script type="text/javascript">//定义一个数组 ...
- iTween基础之Look(使对象面朝指定位置)
一.基础介绍:二.基础属性 原文地址:http://blog.csdn.net/dingkun520wy/article/details/50578142 一.基础介绍 LookTo:旋转游戏对象使其 ...
- [分享] Code::Blocks Windows Console 中文亂碼解決
相信各位大大們應該都有聽過Code::Blocks這個IDE,但網路上有許多人反應Code::Blocks不能編出中文的Console程式,但 Code::Blocks最新的版本預設使用UTF-8做為 ...