转:ibatis的cacheModel
转:ibatis的cacheModel
cachemodel是ibatis里面自带的缓存机制,正确的应用能很好提升我们系统的性能。
使用方法:在sqlmap的配置文件中加入
<cacheModel type="LRU" id="article_cache" readOnly="true" serialize="false">
<flushInterval hours="24"/>
<flushOnExecute statement="articleLists.insertArticle"/>
<property name="cache_size" value="50"/>
</cacheModel>
在查询语句中使用缓存
<select id="getArticles" resultClass="articleList" parameterClass="articleList" cacheModel="article_cache">
先对cachemodel中一些用法进行解释一下:
type:是缓存的类型,ibatis中有4种方式,分别为MEMORY、LRU、FIFO、OSCACHE
MEMORY是内存缓存,和Java内存管理机制类似分为[SOFT、WEAK、STRONG]
LRU是使用最近最少使用策略
FIFO是使用先进先出策略
OSCACHE是通过第三方的缓存插件实现
id:是cachemodel的一个标识
readOnly:指缓存的数据对象是只读还是可读写,默认只读,这里的只读并不是意味着数据对象一旦放入缓存中就无法再对数据进行修改。而是当数
据对象发生变化的时候,如数据对象的某个属性发生了变化,则此数据对象就将被从缓存中废除,下次需要重新从数据库读取数据,构造新的数据对象。而
readOnly="false"则意味着缓存中的数据对象可更新.
serialize:只有在readOnly为false的情况下才生效,因为在readOnly为true时,所有数据对象相同,只有可读写时,才会出现不同的session拥有不同的数据对象副本。
flushInterval:指定缓存自动刷新的时间,可以为hours,minutes,seconds,milliseconds.
flushOnExecute:指定在发生哪些操作时,更新缓存。
property:不同type的cachemodel有不同的属性。
----------------------------------------------------------------------------
下面是本人自己做的实验的一些结果:
(1)当readOnly=true
,serialize=false,只指定insert更新缓存时,我在update一个article的属性后,发现之前的相同的查询条件查询结果是缓
存的内容,没取到更新的结果;当我改变查询条件时,出现了更新的结果。由此可见当readonly=true,查询条件不变时,即使发生更新,缓存仍然有
效;而查询条件变更时,缓存失效,用新的sql去数据库查询。当发生insert操作时,不管查询条件是否变化,都重新去数据库查询,缓存被更新。
(2)当readOnly=false,serialize=false,只指定insert更新缓存时,update一个article属性后,缓存失效,重新去数据库查询
综上来看,对更新比较频繁的数据,使不使用感觉效率差不多,对更新不是很频繁的数据,使用缓存效率还是能提升的!
转:ibatis的cacheModel的更多相关文章
- iBATIS缓存cacheModel属性浅析
iBATIS缓存cacheModel属性的应用使得在Mapped Statement中缓存常用的数据,那么本文将会给你介绍iBATIS缓存cacheModel属性的信息. AD:2013云计算架构师峰 ...
- 【ibatis】cachemodel、属性 及特殊配置
http://www.cnblogs.com/13590/archive/2013/03/01/2938126.html <?xml version="1.0" encodi ...
- Java回顾之ORM框架
这篇文章里,我们主要讨论ORM框架,以及在使用上和JDBC的区别. 概述 ORM框架不是一个新话题,它已经流传了很多年.它的优点在于提供了概念性的.易于理解的数据模型,将数据库中的表和内存中的对象建立 ...
- IBatis.Net XML文件配置
一.添加Provider.config <?xml version="1.0" encoding="utf-8"?> <providers x ...
- ibatis + log4net 配置注意事项
一 在web.config或app.config中配置 <configuration> <configSections> <sectionGroup name=" ...
- iBatis.Net(C#)SQL数据映射
转载请注明 http://www.cnblogs.com/13590/archive/2013/03/01/2938126.html 摘要:本文探讨了iBatis.Net框架的XML数据映射文件各配置 ...
- IBatis.Net学习笔记七--日志处理
IBatis.Net中提供了方便的日志处理,可以输出sql语句等调试信息. 常用的有两种:1.输出到控制台: <configSections> <sectionGroup ...
- ibatis动态查询条件
ibatis的调试相对困难,出错的时候主要依据是log4生成的log文件和出错提示,这方面要能比较熟练的看懂. 下面这个配置基本上包含了最复杂的功能:分页\搜索\排序\缓存\传值Hash表\返回has ...
- Ibatis学习总结4--SQL Map XML 映射文件扩展
SQL Map XML 映射文件除了上文提到的属性还有一些其他重要的属性,下文将详细介绍这些属性. 缓存 Mapped Statement 结果集 通过在查询 statement 中指定 cacheM ...
随机推荐
- Programming with Objective-C ----------Encapsulating Data
Most Properties Are Backed by Instance Variables By default, a readwrite property will be backed by ...
- iPad版微信终于来临了 微信5.4版搜索更智能 转账就是发消息
等待甚久的iPad版微信终于来临了!昨日微信iOS版本更新至5.4.0.16,新增功能包括搜索公众号.识别图中二维码.面对面收钱,同时适配iPad.(微信5.4安卓版重回ios风格 导航菜单都放底栏位 ...
- PHP获取当前域名$_SERVER['HTTP_HOST']和$_SERVER['SERVER_NAME']的区别
开发站群软件,用到了根据访问域名判断子站点的相关问题,PHP获取当前域名有两个变量 $_SERVER['HTTP_HOST'] 和 $_SERVER['SERVER_NAME'],两者的区别以及哪个更 ...
- linux常用命令-帮助命令man,whatis,apropos,info,help
man 命令 man 配置文件,注意这里只需要写文件名称就可以了,不能写文件的绝对路径 man既可以查看命令的帮助信息也可以查看配置文件的帮助信息,如果内容太多,可以输入"/内容" ...
- gulp使用技巧-删除node_modules文件夹,解决目录层次太深删除报错的问题
问题描述: 在使用gulp当中,自动生成的node_modules文件夹,因为文件目录层级太深,无法系统删除,用360粉碎工具也报错 解决方法: 使用npm中的插件rimraf,专门用于删除的模块插件 ...
- django orm字段和参数
字段 1.models.AutoField 自增列 = int(11) 如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=Tr ...
- WEB API异常处理
当一个web api抛出一个异常后 此异常会被转化成一个HTTP响应 错误代码为500的服务错误 但是如果你不想让客户端看到500的错误码 你也可以自定义错误码 如下代码当用户输入的ID没有与之相关的 ...
- 虚拟机ping不通主机,但是主机可以ping通虚拟机
http://chris2013.blog.51cto.com/6931081/1209278
- ACM/ICPC 之 伞兵-最小割转最大流(POJ3308)
//以行列建点,伞兵位置为单向边-利用对数将乘积转加法 //最小割转最大流 //Time:63Ms Memory:792K #include<iostream> #include<c ...
- MySQL5.6 PERFORMANCE_SCHEMA 说明
背景: MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数.并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储 ...