`
wander312
  • 浏览: 215430 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Ibatis输出结果缓存元素---<cacheModel>

 
阅读更多
摘自:
http://blog.sina.com.cn/s/blog_5f6a2a1d0100druo.html

先看一个实例:
<cacheModel id="user-cache" type="LRU" readOnly="true" serialize="false">
<flushInterval hours="24"/>
<flushOnExecute statement="insertUser"/>
<flushOnExecute statement="updateUser"/>
<flushOnExecute statement="deleteUser"/>
<property.name="cache-size" value="1000"/>
</cacheModel>
3个属性:
1、type指定使用“近期最少使用”(LRU)实现。
2、属性readOnly如果不写,默认是true,这时的缓存效果无疑最好,因为系统不需要考虑更新操作引起缓存与实际数据不一致的问题,只读缓存的例子是固化到数据库中的一些配置参数表。但是,通常我们想缓存的数据是需要增删改的,这时务必记得要加上 readOnly = "false";
3、属性serialize,如果不写,默认为false, 将它设为true,可以提高整体应用(而不仅仅是每个Session)的性能。 这种缓存为每一个Session返回缓存对象不同的实例(复本)。因此每一个Session都可以安全修改返回的对象. 注意,此时readOnly必须为false。如果你把它设为 true ,记得检查两件事,一件事是缓存中存放的对象(你想查询的POJO)必须是可序列化的, 即实现Serializable接口。如果你有一个复杂对象属性,它也必须满足这个规则,你的整个对象树必须是可序列化的。另一件事是关闭sql-map-config中的延迟加载属性,即lazyload=false,原因是,它使用了动态代理机制, 那个代理对象并不是Serializable的。

3个子元素:
1、根据flushInterval元素的内容,上面的例子每24小时刷新一次。一个cacheModel只能有一个flushInterval,可以使用hours、minutes、seconds、milliseconds来设定。
2、cacheModel可以定义任意多的flushOnExecute元素。当insertUser,updateUser,deleteUser的Mapped Statement执行时,缓存也被刷新。
3、某些cacheModel的实现可能需要另外的属性,如上面的cache-size属性,在LRU Cache Model中,cache-size指定了缓存储存的项数。
一旦配置了cache model,你可以指定mapped statement使用的Cache Model,例如:
<statement id="getUserList" cacheModel="user-cache">
select * from user
</statement>
type的3种实现
MEMORY 没有统一的对象重用模式的应用,或内存不足的应用。
<property name="reference-type" value="WEAK"/>
WEAK是默认,大多数情况下是最好的选择,能大大提高查用查询的性能,但对于当前不被使用的查询结果数据,将被清除以释放内存来分配其他对象。
LRU  实现用近期最少使用的原则来确定如何从Cache中清除对象。对于较长的时间内,一些用户经常使用某些特定对象的情况(例如,在PaginatedList和常用的查询关键字结果集中翻页),LRU Cache是不错的选择。
<property name="size" value="1000"/>
size必须为整数,代表保存在Cache的中对象的最大数目。因此不要Cache太多的对象,以免内存不足。
FIFO  实现用先进先出的原则来确定如何从Cache中清除对象。对于短时间内持续引用特定的查询而后很可能不再使用的情况,FIFO是很好的选择。
根据个人实践,内存充足时使用LRU,否则使用MEMORY(WEAK)通常能获得较好的效果。
<property name="size" value="1000"/>
size必须为整数,代表保存在Cache的中对象的最大数目。因此不要Cache太多的对象,以免内存不足。
分享到:
评论

相关推荐

    spring-hibernate-dwr实例

    dao.jar&lt;br&gt;spring-hibernate3.jar&lt;br&gt;spring-ibatis.jar&lt;br&gt;spring-jdbc.jar&lt;br&gt;spring-jdo.jar&lt;br&gt;spring-jpa.jar&lt;br&gt;spring-toplink.jar&lt;br&gt;persistence.jar&lt;br&gt;spring-aop.jar&lt;br&gt;spring-agent.jar&lt;br&gt;spring-...

    iBatis-设置缓存模式-Java源码(下载)

    &lt;select id="getByLike" resultClass="Account" parameterClass="Account" cacheModel="categoryCache"&gt; select ACC_ID as id, ACC_FIRST_NAME as firstName, ACC_LAST_NAME as lastName, ACC_EMAIL as ...

    spring+struts+hibernate+dwr+jstl做的实例

    logging.jar&lt;br&gt;log4j-1.2.14.jar&lt;br&gt;spring-dao.jar&lt;br&gt;spring-hibernate3.jar&lt;br&gt;spring-ibatis.jar&lt;br&gt;spring-jdbc.jar&lt;br&gt;spring-jdo.jar&lt;br&gt;spring-jpa.jar&lt;br&gt;spring-toplink.jar&lt;br&gt;persistence.jar&lt;br&gt;...

    SSM三大框架的整合(技术学习).docx

    &lt;spring.version&gt;4.0.2.RELEASE&lt;/spring.version&gt; &lt;!-- mybatis 版本号 --&gt; &lt;mybatis.version&gt;3.2.6&lt;/mybatis.version&gt; &lt;/properties&gt; &lt;dependencies&gt; &lt;!-- Spring 核心库 --&gt; &lt;dependency&gt; &lt;groupId&gt;org....

    Struts+Spring+Ibatis整合框架搭建配置文档

    - **定义Spring的配置参数**:通过`&lt;context-param&gt;`元素来指定Spring的配置文件路径。在本例中,配置文件为`applicationContext.xml`,放置于`/WEB-INF/conf/`目录下。 - **注册Spring的`ContextLoaderServlet`**:...

    SSM三大框架整合详细总结(Spring+SpringMVC+MyBatis).pdf

    &lt;spring.version&gt;4.0.2.RELEASE&lt;/spring.version&gt; &lt;mybatis.version&gt;3.2.6&lt;/mybatis.version&gt; &lt;slf4j.version&gt;1.7.7&lt;/slf4j.version&gt; &lt;log4j.version&gt;1.2.17&lt;/log4j.version&gt; &lt;/properties&gt; &lt;dependencies&gt; &lt;!...

    SSH和SSI等框架常用基础配置web.xml

    `&lt;url-pattern&gt;/*&lt;/url-pattern&gt;`表示该过滤器应用于所有请求路径。 #### 四、Struts配置 ##### 4.1 Struts2过滤器配置 ```xml &lt;filter&gt; &lt;filter-name&gt;struts2&lt;/filter-name&gt; &lt;filter-class&gt;org.apache.struts2...

    ibatis缓存介绍 - 勇泽 - 博客园.mht

    ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园

    ibatis与strtus2集成的简单示例

    &lt;artifactId&gt;struts2-core&lt;/artifactId&gt; &lt;version&gt;2.5.24&lt;/version&gt; &lt;/dependency&gt; &lt;!-- iBatis --&gt; &lt;dependency&gt; &lt;groupId&gt;org.mybatis&lt;/groupId&gt; &lt;artifactId&gt;mybatis&lt;/artifactId&gt; &lt;version&gt;3.5.7&lt;/...

    flex-ibatis-sping项目的创建

    ### flex-ibatis-spring项目的创建详解 #### 一、项目概述 在当前软件开发领域,结合多种技术栈来构建高效稳定的应用系统已成为一种趋势。本文档将详细介绍如何创建一个基于`flex`、`ibatis`(现已更名为MyBatis)...

    apache开源项目源码ibatis-3-core-src-3.0.0.227(ibatis框架java源程序)

    apache开源项目源码ibatis-3-core-src-3.0.0.227 ibatis框架java源程序 spring,struts,hibernate,ibatis,框架源码 各种ibatis框架应用源码,你会从中得到意想不到的效果! apache开源组织开发的开源项目源码,其...

    springmvc-ibatis

    &lt;value&gt;classpath:ibatis-Base.xml&lt;/value&gt; &lt;/property&gt; &lt;property name="dataSource"&gt; &lt;ref bean="dataSource"/&gt; &lt;/property&gt; &lt;/bean&gt; &lt;!-- 配置sqlMapClientTemplate模板 --&gt; &lt;bean id=...

    spring applicationContext 配置文件

    &lt;bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate"&gt; &lt;property name="sqlMapClient"&gt; &lt;ref bean="sqlMapClient" /&gt; &lt;/property&gt; &lt;/bean&gt; &lt;!-- 配置要...

    ibatis-3-core-3.0.0.242.jar.zip

    ibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zip

    spring+ibatis集成文档

    &lt;typeAlias alias="user" type="ch10.SpringAndIbatis.Ibatis"/&gt; &lt;resultMap id="ibatisTest" class="user"&gt; &lt;result column="id" property="id" jdbcType="VARCHAR"/&gt; &lt;result column="name" property="name" ...

    spring+struts2+ibatis

    &lt;result name="success"&gt;/success.jsp&lt;/result&gt; &lt;/action&gt; &lt;/package&gt; ``` iBatis作为数据访问层,允许开发者编写SQL语句并映射到Java对象。最小配置需要在`mybatis-config.xml`中设置数据源,并创建对应的Mapper...

    springboot 实例

    return new ResponseEntity&lt;&gt;(patrols, HttpStatus.OK); } // 其他API接口... } ``` 通过上述步骤,我们就成功地创建了一个使用SpringBoot、Mybatis和MySQL的接口实例。用户可以通过`/patrols`接口获取所有巡逻...

    基于EXT SSI的简单树实现

    &gt;&lt;nodes&gt;&lt;node id="40" text="咨询" /&gt;&lt;node id="20" text="建议" /&gt;&lt;node id="10" text="投诉" /&gt;&lt;node id="50" text="预约" /&gt;&lt;node id="30" text="报障" /&gt;&lt;node id="1090464" text="集团自查工单修改" /&gt;&lt;node ...

Global site tag (gtag.js) - Google Analytics