实体.xml文件中cacheModel
来源:互联网 发布:光伏智能软件 编辑:程序博客网 时间:2024/04/30 08:07
1. cacheModel属性说明
id: cacheModel的id.
type: cache的类型. ibatis目前提供了LRU,MEMORY,FIFO,OSCACHE这四种.
当然,你也可以自己来实现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" />
OSCACHE: 该属性不可用, 而是依赖在ClassPath下的一个oscache.properties文件
2. 具体例子
注: cache的key是具体执行的SQL语句.
举例来说明: 如上面的<select id="CodeModel-SelectCodeModel".
第一次值为1的查询: 通过SQL查询, 缓存的key就会是SELECT...AND C.CODE_ID = 1, 缓存的value就是查询结果.
再执行值为1的查询: 结果就会直接从cache中取. [当然前提必须是:flushInterval还没到,同时flushOnExecute对应的statement还没有被执行过]
如果再执行一次值为2的查询: 那么由于key为 SELECT...AND C.CODE_ID = 2, 在cache不存在, 就会直接执行SQL, 并将结果缓存起来.
也就是cache完全是以具体执行的SQL语句作为key来存储的.
Xml代码
- <cacheModel id="code-CacheModel" type ="LRU" readOnly="true" serialize="false">
- <flushInterval seconds="60"/>
- <flushOnExecute statement="CodeModel-InsertCodeModel"/>
- <property name="cache-size" value="1000" />
- </cacheModel>
<cacheModel id="code-CacheModel" type ="LRU" readOnly="true" serialize="false"><flushInterval seconds="60"/><flushOnExecute statement="CodeModel-InsertCodeModel"/><property name="cache-size" value="1000" /> </cacheModel>
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" />
OSCACHE: 该属性不可用, 而是依赖在ClassPath下的一个oscache.properties文件
2. 具体例子
Xml代码
- <sqlMap namespace="CodeModel">
- <typeAlias alias="codeModel" type="cn.iwoo.demo.model.CodeModel"/>
- <cacheModel id="code-CacheModel" type ="LRU" readOnly="true" serialize="false">
- <flushInterval seconds="60"/>
- <flushOnExecute statement="CodeModel-InsertCodeModel"/>
- <property name="cache-size" value="1000" />
- </cacheModel>
- <resultMap id="BaseModelResult" class="codeModel">
- <result property="createTime" column="CREATE_TIME"/>
- <result property="deleteTime" column="DELETE_TIME"/>
- <result property="defunctInd" column="DEFUNCT_IND"/>
- </resultMap>
- <resultMap id="CodeModelResult" class="codeModel" extends="BaseModelResult">
- <result property="id" column="CODE_ID"/>
- </resultMap>
- <select id="CodeModel-SelectCodeModel" parameterClass="java.lang.Long" resultMap="CodeModelResult" cacheModel="code-CacheModel">
- SELECT C.CODE_ID, C.CREATE_TIME, C.DELETE_TIME, C.DEFUNCT_IND
- FROM CODEMSTR C
- WHERE 11 = 1
- <isNotNull prepend="AND ">
- C.CODE_ID = #value#
- </isNotNull>
- </select>
- <insert id="CodeModel-InsertCodeModel" parameterClass="codeModel">
- INSERT INTO CODEMSTR(CODE_ID, CREATE_TIME, DELETE_TIME, DEFUNCT_IND)
- VALUES (#id#, #createTime#, #deleteTime#, #defunctInd#)
- </insert>
- </sqlMap>
<sqlMap namespace="CodeModel"><typeAlias alias="codeModel" type="cn.iwoo.demo.model.CodeModel"/><cacheModel id="code-CacheModel" type ="LRU" readOnly="true" serialize="false"><flushInterval seconds="60"/><flushOnExecute statement="CodeModel-InsertCodeModel"/><property name="cache-size" value="1000" /> </cacheModel><resultMap id="BaseModelResult" class="codeModel"><result property="createTime" column="CREATE_TIME"/><result property="deleteTime" column="DELETE_TIME"/><result property="defunctInd" column="DEFUNCT_IND"/></resultMap><resultMap id="CodeModelResult" class="codeModel" extends="BaseModelResult"><result property="id" column="CODE_ID"/></resultMap><select id="CodeModel-SelectCodeModel" parameterClass="java.lang.Long" resultMap="CodeModelResult" cacheModel="code-CacheModel">SELECT C.CODE_ID, C.CREATE_TIME, C.DELETE_TIME, C.DEFUNCT_IND FROM CODEMSTR C WHERE 1 = 1 <isNotNull prepend="AND "> C.CODE_ID = #value# </isNotNull> </select><insert id="CodeModel-InsertCodeModel" parameterClass="codeModel">INSERT INTO CODEMSTR(CODE_ID, CREATE_TIME, DELETE_TIME, DEFUNCT_IND)VALUES (#id#, #createTime#, #deleteTime#, #defunctInd#)</insert></sqlMap>
注: cache的key是具体执行的SQL语句.
举例来说明: 如上面的<select id="CodeModel-SelectCodeModel".
第一次值为1的查询: 通过SQL查询, 缓存的key就会是SELECT...AND C.CODE_ID = 1, 缓存的value就是查询结果.
再执行值为1的查询: 结果就会直接从cache中取. [当然前提必须是:flushInterval还没到,同时flushOnExecute对应的statement还没有被执行过]
如果再执行一次值为2的查询: 那么由于key为 SELECT...AND C.CODE_ID = 2, 在cache不存在, 就会直接执行SQL, 并将结果缓存起来.
也就是cache完全是以具体执行的SQL语句作为key来存储的.
- 实体.xml文件中cacheModel
- 实体数据模型的XML文件
- 在 XML 中添加实体
- 在XML中添加实体
- XML中特殊符号转义实体
- XML中实体的概念
- xml文件中的内容包含了XML文档中预定义好的实体解决办法
- mybatis的config.xml文件中不再需要通过<mapper>一个一个配置实体的xml文件了
- 实体xml文件映射多对多
- mybatis自动生成实体xml文件
- XML文件反序列化为实体类
- VS 2005中xml文件和实体类(List)之间的转换
- myeclipse中又orcale数据库表生成实体类,数据库操作类,xml文件
- PA不在persistence.xml文件中配置每个Entity实体类的2种解决办法
- JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法
- JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法
- JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法
- mapping文件的编写(以及实体类与xml中类型的对应关系)
- treepanel所要的json格式的数据
- 2011年7月6日 《C++ Primer》 第8章示例 8.7 strquote.cpp
- bak 6.android xml解析 XmlPullParser的使用.
- pb9中使用htmltable方式将数据窗口导出为excel文件的几点看法
- 有关socket通信包大小的问题总结(UDP传输模式)
- 实体.xml文件中cacheModel
- 即时通讯软件openfire+spark+smack
- 一个通用Makefile的编写
- 简单的版面分析
- TCPIPChap171819TCP
- Service
- Android service 服务 笔记
- 中国手机再次迎来历史性发展机遇
- c#中delegate和event之间的区别