- 浏览: 81503 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
fujilin:
学习了
DetachedCriteria需要吗?不需要吗? -
zyh2007000zyh:
很好,但是我想请教一下,怎么做可以防止\..\..\文件名这样 ...
文件下载 -
ws347575294:
谢谢。
js窗口关闭事件 -
guobingxu_javaeye:
有用,谢了
No buffer space available -
wqxchj:
总结得不错,我这几天也在解决这个问题。
谢谢!
No buffer space available
缓存Mapped Statement结果集
通过在查询statement中指定cacheModel属性,可以缓存Mapped Statement中得到的查询结果。Cache model是在SQL Map XML文件中定义的可配置缓存模式,可以使用cacheModel元素来配置。例子如下:
<cacheModel id="product-cache" type ="LRU" readOnly=”true” serialize=”false”>
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/> http://www.ibatis.com
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name=”cache-size” value=”1000” />
</cacheModel>
上面的cache model创建了一个名为“product-cache”的缓存,使用“近期最少使用”(LRU)实现。Implemention属性的名称要么是全限定的类名,要么是缓存实现的别名(参见下面的内容)。根据cacheModel中flush元素的内容,上面的例子每24小时刷新一次。一个cacheModel只能有一个flushInteval元素,它可以使用hours,minutes,seconds或milliseconds来设定。另外,当insertProduct,updateProduct或deleteProduct的Mapped Statement执行时,缓存也被刷新。cacheModel可以定义任意flushOnExecute元素。某些cache model的实现可能需要另外的属性,如上面的“cache-size”属性。在LRU cache model中,cache-size指定了缓存储存的项数。一旦配置了cache model,您可以指定mapped statement使用的cache model,例如:
<statement id=”getProductList” cacheModel=”product-cache”>
select * from PRODUCT where PRD_CAT_ID = #value#
</statement>
只读 VS 可读写
框架同时支持只读和可读写缓存。只读缓存可供所有用户共享,因此性能更好。但是,只读缓存的数据不应该被修改。相反,要更新数据,必须从数据库(或读写缓存)中读出数据。因此,如果要读出数据并修改,则需要可读写缓存。要使用只读缓存,在cacheModel设置readOnly=“true”。要使用可读写缓存,则设置readOnly=“false”。缺省为只读缓存(true)。
Serializable可读写缓存
正如您所知道的,只对当前Session有效的缓存对整体应用性能的提高作用有限。Serializable可读写缓存可以提高整体应用(而不仅仅是每个Session)的性能。这种缓存为每一个Session返回缓存对象不同的实例(复本)。因此每一个Session都可以安全修改返回的对象。不同之处在于,通常您希望从缓存中得到同一个对象,但这种情况下得到的是不同的对象。还有,每一个缓冲在Serializable缓存的对象都必须是Serializable的。这意味着不能同时使用Serializable缓存和延迟加载,因为延迟加载代理不是Serializable的。想知道如何把Serializable缓存,延迟加载和联合查询结合起来使用,最好的方法是尝试。要使用Serializable缓存,设置readOnly=“false”和serialize=“true”。缺省情况下,缓存是只读模式,不使用Serializable缓存。只读缓存不需要Serializable。 缓存类型Cache Model使用插件方式来支持不同的缓存算法。它的实现在cacheModel的用type属性来指定(如上所示)。指定的实现类必须实现CacheController接口,或是下面4个别名中的其中之一。Cache Model实现的其他配置参数通过cacheModel的property元素来设置。目前包括以下的4个实现:
“MEMORY” (com.ibatis.db.sqlmap.cache.memory.MemoryCacheController)
MEMORY cache实现使用reference类型来管理cache的行为。垃圾收集器可以根据reference类型判断是否要回收cache中的数据。MEMORY实现适用于没有统一的对象重用模式的应用,或内存不足的应用。
MEMORY实现可以这样配置:
<cacheModel id="product-cache" type="MEMORY">
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name=”reference-type” value=”WEAK” />
</cacheModel>
MEMORY cache实现只认识一个<property>元素。这个名为“reference-type”属性的值必须是STRONG,SOFT和WEAK三者其一。这三个值分别对应于JVM不同的内存reference类型。
下面的表格介绍了在MEMORY实现中不同的reference 类型。要更好地理解reference类型,请参考JDK文档中的java.lang.ref,以获得更多关于“reachability”的信息。
WEAK(缺省)
大多数情况下,WEAK类型是最佳选择。如果不指定类型,缺省类型就是WEAK。它能大大提高常用查询的性能。但是对于当前不被使用的查询结果数据,将被清除以释放内存用来分配其他对象。
SOFT
在查询结果对象数据不被使用,同时需要内存分配其他对象的情况下,SOFT类型将减少内存不足的可能性。然而,这不是最具侵入性的reference类型,结果数据依然可能被清除。
STRONG
STRONG类型可以确保查询结果数据一直保留在内存中,除非Cache被刷新(例如,到了刷新的时间或执行了更新数据的操作)。对于下面的情况,这是理想的选择:1)结果内容数据很少,2)完全静态的数据,和3)频繁使用的数据。优点是对于这类查询性能非常好。缺点是,如果需要分配其他对象,内存无法释放(可能是更重要的数据对象)。
“LRU” (com.ibatis.db.sqlmap.cache.lru.LruCacheController)
LRU Cache实现用“近期最少使用”原则来确定如何从Cache中清除对象。当Cache溢出时,最近最少使用的对象将被从Cache中清除。使用这种方法,如果一个特定的对象总是被使用,它将保留在Cache中,而且被清除的可能性最小。对于在较长的期间内,某些用户经常使用某些特定对象的情况(例如,在PaginatedList和常用的查询关键字结果集中翻页),LRU Cache是一个不错的选择。
LRU Cache实现可以这样配置:
<cacheModel id="product-cache" type="LRU">
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name=”size” value=”1000” />
</cacheModel>
LRU Cache实现只认可一个property元素。其名为“cache-size”的属性值必须是整数,代表同时保存在Cache中对象的最大数目。值得注意的是,这里指的对象可以是任意的,从单一的String对象到Java Bean的ArrayList对象都可以。因此,不要Cache太多的对象,以免内存不足。
“FIFO” (com.ibatis.db.sqlmap.cache.fifo.FifoCacheController)
FIFO Cache实现用“先进先出”原则来确定如何从Cache中清除对象。当Cache溢出时,最先进入Cache的对象将从Cache中清除。对于短时间内持续引用特定的查询而后很可能不再使用的情况,FIFO Cache是很好的选择。
FIFO Cache可以这样配置:
<cacheModel id="product-cache" type="FIFO">
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name=”size” value=”1000” />
</cacheModel>
FIFO Cache实现只认可一个property元素。其名为“cache-size”的属性值必须是整数,代表同时保存在Cache中对象的最大数目。值得注意的是,这里指的对象可以是任意的,从单一的String对象到Java Bean的ArrayList对象都可以。因此,不要Cache太多的对象,以免内存不足。
“OSCACHE”
OSCACHE Cache实现是OSCache2.0缓存引擎的一个Plugin。它具有高度的可配置性,分布式,高度的灵活性。
OSCACHE实现可以这样配置:
<cacheModel id="product-cache" type="OSCACHE">
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
</cacheModel>
OSCACHE实现不使用property元素,而是在类路径的根路径中使用标准的oscache.properties文件进行配置。在oscache.properties文件中,您可以配置Cache的算法(和上面讨论的算法很类似),Cache的大小,持久化方法(内存,文件等)和集群方法。要获得更详细的信息,请参考OSCache文档。OSCache及其文档可以从OpenSymphony网站上获取:http://www.opensymphony.com/oscache/
通过在查询statement中指定cacheModel属性,可以缓存Mapped Statement中得到的查询结果。Cache model是在SQL Map XML文件中定义的可配置缓存模式,可以使用cacheModel元素来配置。例子如下:
<cacheModel id="product-cache" type ="LRU" readOnly=”true” serialize=”false”>
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/> http://www.ibatis.com
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name=”cache-size” value=”1000” />
</cacheModel>
上面的cache model创建了一个名为“product-cache”的缓存,使用“近期最少使用”(LRU)实现。Implemention属性的名称要么是全限定的类名,要么是缓存实现的别名(参见下面的内容)。根据cacheModel中flush元素的内容,上面的例子每24小时刷新一次。一个cacheModel只能有一个flushInteval元素,它可以使用hours,minutes,seconds或milliseconds来设定。另外,当insertProduct,updateProduct或deleteProduct的Mapped Statement执行时,缓存也被刷新。cacheModel可以定义任意flushOnExecute元素。某些cache model的实现可能需要另外的属性,如上面的“cache-size”属性。在LRU cache model中,cache-size指定了缓存储存的项数。一旦配置了cache model,您可以指定mapped statement使用的cache model,例如:
<statement id=”getProductList” cacheModel=”product-cache”>
select * from PRODUCT where PRD_CAT_ID = #value#
</statement>
只读 VS 可读写
框架同时支持只读和可读写缓存。只读缓存可供所有用户共享,因此性能更好。但是,只读缓存的数据不应该被修改。相反,要更新数据,必须从数据库(或读写缓存)中读出数据。因此,如果要读出数据并修改,则需要可读写缓存。要使用只读缓存,在cacheModel设置readOnly=“true”。要使用可读写缓存,则设置readOnly=“false”。缺省为只读缓存(true)。
Serializable可读写缓存
正如您所知道的,只对当前Session有效的缓存对整体应用性能的提高作用有限。Serializable可读写缓存可以提高整体应用(而不仅仅是每个Session)的性能。这种缓存为每一个Session返回缓存对象不同的实例(复本)。因此每一个Session都可以安全修改返回的对象。不同之处在于,通常您希望从缓存中得到同一个对象,但这种情况下得到的是不同的对象。还有,每一个缓冲在Serializable缓存的对象都必须是Serializable的。这意味着不能同时使用Serializable缓存和延迟加载,因为延迟加载代理不是Serializable的。想知道如何把Serializable缓存,延迟加载和联合查询结合起来使用,最好的方法是尝试。要使用Serializable缓存,设置readOnly=“false”和serialize=“true”。缺省情况下,缓存是只读模式,不使用Serializable缓存。只读缓存不需要Serializable。 缓存类型Cache Model使用插件方式来支持不同的缓存算法。它的实现在cacheModel的用type属性来指定(如上所示)。指定的实现类必须实现CacheController接口,或是下面4个别名中的其中之一。Cache Model实现的其他配置参数通过cacheModel的property元素来设置。目前包括以下的4个实现:
“MEMORY” (com.ibatis.db.sqlmap.cache.memory.MemoryCacheController)
MEMORY cache实现使用reference类型来管理cache的行为。垃圾收集器可以根据reference类型判断是否要回收cache中的数据。MEMORY实现适用于没有统一的对象重用模式的应用,或内存不足的应用。
MEMORY实现可以这样配置:
<cacheModel id="product-cache" type="MEMORY">
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name=”reference-type” value=”WEAK” />
</cacheModel>
MEMORY cache实现只认识一个<property>元素。这个名为“reference-type”属性的值必须是STRONG,SOFT和WEAK三者其一。这三个值分别对应于JVM不同的内存reference类型。
下面的表格介绍了在MEMORY实现中不同的reference 类型。要更好地理解reference类型,请参考JDK文档中的java.lang.ref,以获得更多关于“reachability”的信息。
WEAK(缺省)
大多数情况下,WEAK类型是最佳选择。如果不指定类型,缺省类型就是WEAK。它能大大提高常用查询的性能。但是对于当前不被使用的查询结果数据,将被清除以释放内存用来分配其他对象。
SOFT
在查询结果对象数据不被使用,同时需要内存分配其他对象的情况下,SOFT类型将减少内存不足的可能性。然而,这不是最具侵入性的reference类型,结果数据依然可能被清除。
STRONG
STRONG类型可以确保查询结果数据一直保留在内存中,除非Cache被刷新(例如,到了刷新的时间或执行了更新数据的操作)。对于下面的情况,这是理想的选择:1)结果内容数据很少,2)完全静态的数据,和3)频繁使用的数据。优点是对于这类查询性能非常好。缺点是,如果需要分配其他对象,内存无法释放(可能是更重要的数据对象)。
“LRU” (com.ibatis.db.sqlmap.cache.lru.LruCacheController)
LRU Cache实现用“近期最少使用”原则来确定如何从Cache中清除对象。当Cache溢出时,最近最少使用的对象将被从Cache中清除。使用这种方法,如果一个特定的对象总是被使用,它将保留在Cache中,而且被清除的可能性最小。对于在较长的期间内,某些用户经常使用某些特定对象的情况(例如,在PaginatedList和常用的查询关键字结果集中翻页),LRU Cache是一个不错的选择。
LRU Cache实现可以这样配置:
<cacheModel id="product-cache" type="LRU">
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name=”size” value=”1000” />
</cacheModel>
LRU Cache实现只认可一个property元素。其名为“cache-size”的属性值必须是整数,代表同时保存在Cache中对象的最大数目。值得注意的是,这里指的对象可以是任意的,从单一的String对象到Java Bean的ArrayList对象都可以。因此,不要Cache太多的对象,以免内存不足。
“FIFO” (com.ibatis.db.sqlmap.cache.fifo.FifoCacheController)
FIFO Cache实现用“先进先出”原则来确定如何从Cache中清除对象。当Cache溢出时,最先进入Cache的对象将从Cache中清除。对于短时间内持续引用特定的查询而后很可能不再使用的情况,FIFO Cache是很好的选择。
FIFO Cache可以这样配置:
<cacheModel id="product-cache" type="FIFO">
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name=”size” value=”1000” />
</cacheModel>
FIFO Cache实现只认可一个property元素。其名为“cache-size”的属性值必须是整数,代表同时保存在Cache中对象的最大数目。值得注意的是,这里指的对象可以是任意的,从单一的String对象到Java Bean的ArrayList对象都可以。因此,不要Cache太多的对象,以免内存不足。
“OSCACHE”
OSCACHE Cache实现是OSCache2.0缓存引擎的一个Plugin。它具有高度的可配置性,分布式,高度的灵活性。
OSCACHE实现可以这样配置:
<cacheModel id="product-cache" type="OSCACHE">
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
</cacheModel>
OSCACHE实现不使用property元素,而是在类路径的根路径中使用标准的oscache.properties文件进行配置。在oscache.properties文件中,您可以配置Cache的算法(和上面讨论的算法很类似),Cache的大小,持久化方法(内存,文件等)和集群方法。要获得更详细的信息,请参考OSCache文档。OSCache及其文档可以从OpenSymphony网站上获取:http://www.opensymphony.com/oscache/
- iBATIS-SqlMaps-2_cn.pdf (982.9 KB)
- 下载次数: 20
发表评论
-
split 字符转义
2010-08-06 14:58 2026Java中的我们可以利用split把字符串按照指定的分割符进行 ... -
log4j配置
2010-07-14 09:12 756第一步:加入log4j-1.2.8.jar到li ... -
JDK1.6官方下载_JDK6官方下载
2010-01-18 09:21 1809JDK1.6官方下载_JDK6官方下载 JDK1.6官方下载 ... -
No buffer space available
2009-12-18 16:07 13136No buffer space available 2009 ... -
利用MINA传送对象,字符串(前后台代码)
2009-10-19 10:14 5562利用MINA传送对象,字符串(前后台代码) 其中用 ... -
js窗口关闭事件
2009-10-12 13:48 4363js窗口关闭事件使用onbeforeunload_handle ... -
joomla数据库表简介
2009-10-09 15:35 1306Joomla系统的数据库表一共35张表,这里解释一下每个表对应 ... -
CronTrigger配置
2009-09-17 14:39 1157CronTrigger配置完整格式为: [秒] [分] [小时 ... -
日期格式化(星期的用法)
2009-09-07 15:21 1235Date date = new Date(); SimpleD ... -
弹出窗口代码汇总
2009-09-03 13:33 1563何利用网页弹出各种形 ... -
网页收藏代码
2009-09-03 13:19 3774访问网站时自动设为首页及收藏代码分享 <a hre ... -
文件下载
2009-08-26 14:53 2273jsp中实现文件下载的最简单的方式是在网页上做超级链接,如:& ... -
不同数据库中查询前几条记录的用法
2009-08-22 11:38 1216SQL在不同数据库中查询前几条记录的用法分类 1. orA ... -
dsl
2009-05-14 11:29 1044领域专用语言(DSL)收 ... -
XML
2008-08-18 18:55 1200在平时工作中,难免会遇到把 XML 作为数据存储格式。面对目 ... -
<c:forEach>标签的使用
2008-08-12 13:55 1251在JSP的开发中,迭代 ... -
extremecomponents中文文档
2008-07-30 14:42 4083eXtremeComponents 参考文档 Jeff Jo ... -
DetachedCriteria需要吗?不需要吗?
2008-07-29 17:12 1527Hibernate3中提供了Detach ... -
Hibernate3支持DetachedCriteria
2008-07-29 17:07 871Hibernate3支持DetachedCriteria,这是 ... -
Hibernate3中DetachedCriteria的使用
2008-07-29 16:18 1058Criteria對SQL進行封裝,讓開發人員可以用物件的方式來 ...
相关推荐
iBATIS缓存的使用方法
iBATIS缓存介绍 iBATIS二级缓存 iBATIS缓存配置
ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园
如何解决动态数据表名,动态字段名情况下,由ibatis缓存select字段而引起的字段找不到的情况?以下是最简单的解决办法! 本文中内容真实可靠,保证用户很快掌握
Java ibatis缓存技术,ibatis缓存的详细解释 值得学习!
ibatis 缓存配置策略,学习篇 • iBatis对查询结果集进行本地缓存。 • Cache的key由haskcode、checksum、查询参数、sqlmap Id、sql语句、调用方法名等构成。由此可以看出,不同的参数会有不同的Key。注意,他不是以...
ibatis 缓存 - 24小时学习网ibatis 缓存 - 24小时学习网ibatis 缓存 - 24小时学习网ibatis 缓存 - 24小时学习网ibatis 缓存 - 24小时学习网
Java_ibatis缓存技术
NULL 博文链接:https://sunfish.iteye.com/blog/1493410
NULL 博文链接:https://mov-webhobo.iteye.com/blog/1672240
ibatis 数据缓存,帮你了解ibatis的数据缓存机制。
iBATIS缓存介绍[借鉴].pdf
ibatis 数据缓存,讨论了ibatis 数据缓存方面的概念,即用法,用到ibatis 数据缓存的可以参考一下
缓存不算是ibatis框架的一个亮点,但理解ibatis的缓存设计和实现对我们合理使用ibatis缓存是很有帮助的。
spring+ibatis+oracle分页缓存源码
Oscache.jar包 博文链接:https://dangzhao.iteye.com/blog/193572
高性能是J2EE应用程序追求的目标,在特定硬件基础上,数据...在对 iBATIS的缓存支持情况进行了介绍和研究的基础上,并结合Spring框架和iBATIS,使用Memcached对iBATIS二级缓存进行了新的实现,使应用的性能得到了很大的提升.