一,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)的更多相关文章

  1. iBATIS缓存cacheModel属性浅析

    iBATIS缓存cacheModel属性的应用使得在Mapped Statement中缓存常用的数据,那么本文将会给你介绍iBATIS缓存cacheModel属性的信息. AD:2013云计算架构师峰 ...

  2. WEB缓存初探

    WEB缓存初探 概念理解 缓存--缓存就是数据交换的缓冲区(称作Cache) 缓存 的作用说白了就是用来就近获取东西,比如我们会把已经拿到的常用的东西放在手边(与自己相对较近的地方),方便下次需要时去 ...

  3. SpringCache缓存初探

    body,table tr { background-color: #fff } table tr td,table tr th { border: 1px solid #ccc; text-alig ...

  4. HTTP缓存初探

    缓存的作用 用户访问一个web页面的频率远高于web页面更新的频率,因此多数时候用户从服务器获取的html.js.css以及图片等内容都是相同的,如果每次访问都从服务器获取这些静态内容即降低了页面加载 ...

  5. ibatis缓存配置

    一.sqlmapconfig.xml <sqlMapConfig> <settings useStatementNamespaces="true"  cacheM ...

  6. ibatis返回结果映射到HashMap时,列名无效的问题

    遇到问题: 1.项目开发过程中在xml配置文件中使用$tableName/sql$时,报"列名无效"错误,后来经过查询,发现是ibatis缓存 了上一次查询的表结构的原因.解决办法 ...

  7. iBatis --> MyBatis

    从 Clinton Begin 到 Google(从 iBatis 到 MyBatis,从 Apache Software Foundation 到 Google Code),Apache 开源代码项 ...

  8. MyBatis 一级缓存、二级缓存全详解(一)

    目录 MyBatis 一级缓存.二级缓存全详解(一) 什么是缓存 什么是MyBatis中的缓存 MyBatis 中的一级缓存 初探一级缓存 探究一级缓存是如何失效的 一级缓存原理探究 还有其他要补充的 ...

  9. SpringCache - 请求级别缓存的简易实现

    前言 在SpringCache缓存初探中我们研究了如何利用spring cache已有的几种实现快速地满足我们对于缓存的需求.这一次我们有了新的更个性化的需求,想在一个请求的生命周期里实现缓存. 需求 ...

随机推荐

  1. Android混淆问题

    最近做了2个项目,全部要混淆,刚接触,自己在网上找了还多资料,感觉各有千秋,自己总结了一下,第一次发帖,不喜勿喷.求各种指导!!! android应用程序的混淆打包规范 1.在工程文件project. ...

  2. 2013-07-24 IT 要闻速记快想

    ### ========================= ###凡客有闹钟?从凡客的角度来讲,闹钟等工具类应用是为推广品牌和产品服务,通过工具类产品给大众一个对凡客品牌的认知.而选择推出工具类的产品 ...

  3. vs2008中使用Newtonsoft.Json

    异常:找不到方法:“Boolean System.Runtime.Serialization.DataContractAttribute.get_IsReference()” 在使用Newtonsof ...

  4. Selenium 入门

    我本身也是一个初学者,就顺手记录一下自己的成长记录,共勉 1, 登录selenium官方网站,download 相关的插件. http://docs.seleniumhq.org/ 我用的是eclip ...

  5. cadence原理图绘制方法

    仅记录了绘制好原理图后的一些处理: 1 重写编写元件编号 1)Tool -> Annotate   在Packing选项卡中 的Action  选中 Reset part references ...

  6. Oracle RAC中的一台机器重启以后无法接入集群

          前天有个同事说有套AIX RAC的其中一台服务器重启了操作系统以后,集群资源CSSD的资源一直都在START的状态,检查日志输出有如下内容: [    CSSD][1286]clssnmv ...

  7. c# this.location和e.X的区别

    this.location是窗口当前位置 e.X是具体事件的相对坐标 size是窗口尺寸宽和高

  8. IIS7.5 HTTP 错误 500.19 - Internal Server Error 问题的解决方案

    昨天在 windows 7 下用 IIS 7.5 运行一个以前用 .NET Framework 3.5 写的项目,发现总是出现 500.19 错误,如下: 百度了好久,没找到解决问题确切的答案,我也知 ...

  9. android开发之socket快传文件以及消息返回

    应用场景: 两台android机器:一台自建wifi热点,另一台搜索到,连接该wifi热点.之后再通过socket传递消息,文件等,当服务器端接收到消息之后会返回对应的应答消息: 注意点:接收到消息之 ...

  10. Visual Studio Code asp.net 5环境搭建技能Get

    启动准备阶段 预热 1 VS Code 官方地址:https://www.visualstudio.com/en-us/products/code-vs.aspx 2 安装Node.js :https ...