当前位置:首页 > 开发 > 数据库 > 正文

Mybatis 学习转

发表于: 2011-09-07   作者:dfwang   来源:转载   浏览次数:
摘要: Mybatis缓存系列 在sqlMap文件中加入cacheModel的配置:     <cacheModel id="model-cache" type="MEMORY" >      <flushInterval seconds="60"
Mybatis缓存系列
在sqlMap文件中加入cacheModel的配置:

    <cacheModel id="model-cache" type="MEMORY" >

     <flushInterval seconds="60"/>
     <flushOnExecute statement="insertProduct"/>
     <flushOnExecute statement="updateProduct"/>
     <flushOnExecute statement="deleteProduct"/>

     <property name="size" value="1000" />
    </cacheModel>

      这个地方要注意的是,如果在sqlMapConfig里面设置了useStatementNamespaces="true",那么上面的flushOnExecute中的statement里面需要带上namespace,如<flushOnExecute statement="Product.insertProduct"/>,如果useStatementNamespaces="false",则可以直接按上面的写。

     2、配置需要进行cache的sql statment:

      <statement id="getProductList" parameterClass="int" cacheModel="model-cache">
        select * from PRODUCT where PRD_CAT_ID = #value#
      </statement>

     配置好这两步就可实现iBatis的缓存了,下面解释一下含义:

     1步中,cacheModel的id属性用于后面的statement引用,type属性标识采用何种cache方式,可选的有:

“MEMORY” (com.ibatis.db.sqlmap.cache.memory.MemoryCacheController) 。MEMORY cache 实现使用 reference 类型来管理 cache 的行为。垃圾收集器可以根据 reference类型判断是否要回收 cache 中的数据。MEMORY实现适用于没有统一的对象重用模式的应用,或内存不足的应用。
“LRU” (com.ibatis.db.sqlmap.cache.lru.LruCacheController) 。LRU Cache 实现用“近期最少使用”原则来确定如何从 Cache 中清除对象。当 Cache溢出时,最近最少使用的对象将被从 Cache 中清除。使用这种方法,如果一个特定的对象总是被使用,它将保留在 Cache 中,而且被清除的可能性最小。对于在较长的期间内,某些用户经常使用某些特定对象的情况(例如,在 PaginatedList 和常用的查询关键字结果集中翻页) ,LRU Cache 是一个不错的选择。  
“FIFO” (com.ibatis.db.sqlmap.cache.fifo.FifoCacheController) 。FIFO Cache 实现用“先进先出”原则来确定如何从 Cache 中清除对象。当 Cache 溢出时,最先进入 Cache 的对象将从 Cache 中清除。对于短时间内持续引用特定的查询而后很可能不再使用的情况,FIFO Cache 是很好的选择。
“OSCACHE” (com.ibatis.db.sqlmap.cache.oscache.OSCacheController)  。OSCACHE Cache 实现是OSCache2.0缓存引擎的一个 Plugin。它具有高度的可配置性,分布式,高度的灵活性。
       flushInterval 属性是配置自动更新缓存的周期,可以是hours,minutes,seconds或milliseconds。这一点我测试了一下,设置的60秒更新,通过观察日志,在60秒内,第一次查询数据库,之后iBatis会对同样的sql查询直接返回。超过60秒后的第一次查询,又会执行一次查询。这样看了,这个更新的周期可理解为第一次同样的查询可维持在cache中的时长,超过这个时长的第一次查询会触发实际的数据库操作。

      flushOnExecute这是标识什么时候触发更新,statement的名字就是后面的statement的id。

      statement节中设置了cacheModel,就会把这个sql跟cache关联起来。

      是不是很简单呢,这里面我觉得比较关键的地方就是cacheModel的type选择,一般来说用memory就可以了,但一些特殊的应用,需要根据情况需要配置不同的更适合的cache,以进一步提高查询效率。

Mybatis 学习转

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
这篇博客是我学习mybatis的心得。也是对自己的鞭策。 这些我想一步步的解答:)每天记录一下自己的学
MyBatis下载地址: http://code.google.com/p/mybatis/ 搭建第一个mybatis应用 创建系统所需数据库 -
最近想尝试下Struts2+Spring3+MyBatis3的架构,所以特地学习了下MyBatis3。把学习的过程记录了下来
From: http://qiuqiu0034.iteye.com/blog/1157768#bc2302703 mybatis-3.0.3.jar http://code.google
------------------了解---------------------------- MyBatis本是Apache的一个开源项目iBatis,201
所需要jar包:mybatis-3.x.x.jar 、如果需要和spring整合,还需要加入相关的包 1:看项目目录 红颜
mybatis是一个ORM框架,因为activiti使用了mybatis,所以学习下; mybatis单独运行可以不依靠任何框
一、Mybatis介绍      MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。My
从同事那知道有个轻量级的持久化工具,简单入手,适合中小型项目,所以充充电,简单了解下它的基本
从同事那知道有个轻量级的持久化工具,简单入手,适合中小型项目,所以充充电,简单了解下它的基本
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号