`
xiexd
  • 浏览: 248720 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ibatis 缓存机制初探(转)

    博客分类:
  • JAVA
阅读更多


一,IBATIS 缓存机制使用

 

1,sqlMapConfig.xml中配置

Xml代码
  1. 1.SqlMapConfig.xml中  
  2. < settings   
  3. cacheModelsEnabled = "true"  //设置为true  
  4. enhancementEnabled = "true"   
  5. lazyLoadingEnabled = "true"   
  6. .............  
  7. />    
1.SqlMapConfig.xml中
<settings
cacheModelsEnabled="true" //设置为true
enhancementEnabled="true"
lazyLoadingEnabled="true"
.............
/> 

 注意点,k,必须配置settings这个标签,否则

 

Xml代码
  1. cacheModelsEnabled = "false"    
cacheModelsEnabled="false" 

 

Xml代码
  1. cacheModelsEnabled = "true"   是默认的,无须配置也可,建议配置  
cacheModelsEnabled="true"  是默认的,无须配置也可,建议配置

 

2,配置具体的sqlMap.xml

 

Xml代码
  1. < cacheModel   id = "baby-cache"   type = "LRU"   readOnly = "false"   
  2.         serialize = "true" >   
  3.         < flushInterval   hours = "24"   />   
  4.         < flushOnExecute   statement = "getBabyByParams"   />   
  5.         < property   value = "600"   name = "size"   />   
  6.     </ cacheModel >   
  7.   
  8.   
  9. < select   id = "getBabyByParams"   resultMap = "baby-Result"   cacheModel = "baby-cache" >   
  10.         select * from Baby  
  11.         < dynamic   prepend = "where" >   
  12.             < isPropertyAvailable   property = "name"   prepend = "and" >   
  13.                 name  = #name#  
  14.             </ isPropertyAvailable >   
  15.             < isPropertyAvailable   property = "sex"   prepend = "and" >   
  16.                 sex  =  
  17.                 #sex,jdbcType = VARCHAR , javaType = com .yajun.enumdemo.SexEnum#  
  18.             </ isPropertyAvailable >   
  19.             < isPropertyAvailable   property = "BirthdayBondStart"   
  20.                 prepend = "and" >    
  21.                <![CDATA[  
  22.                      birthday >= cast(#BirthdayBondStart# as datetime)  
  23.                ]]>   
  24.             </ isPropertyAvailable >   
  25.             < isPropertyAvailable   property = "BirthdayBondEnd"   
  26.                 prepend = "and" >   
  27.                  <![CDATA[  
  28.                      birthday <= cast(#BirthdayBondEnd# as datetime)  
  29.                  ]]>   
  30.             </ isPropertyAvailable >   
  31.             < isPropertyAvailable   property = "hobby"   prepend = "and" >   
  32.                 hobby like '%'||#hobby#||'%'  
  33.             </ isPropertyAvailable >   
  34.         </ dynamic >   
  35.     </ select >   
<cacheModel id="baby-cache" type="LRU" readOnly="false"
		serialize="true">
		<flushInterval hours="24" />
		<flushOnExecute statement="getBabyByParams" />
		<property value="600" name="size" />
	</cacheModel>


<select id="getBabyByParams" resultMap="baby-Result" cacheModel="baby-cache">
		select * from Baby
		<dynamic prepend="where">
			<isPropertyAvailable property="name" prepend="and">
				name = #name#
		   	</isPropertyAvailable>
			<isPropertyAvailable property="sex" prepend="and">
				sex =
				#sex,jdbcType=VARCHAR,javaType=com.yajun.enumdemo.SexEnum#
			</isPropertyAvailable>
			<isPropertyAvailable property="BirthdayBondStart"
				prepend="and"> 
		   	   <![CDATA[
		   	         birthday >= cast(#BirthdayBondStart# as datetime)
		   	   ]]>
			</isPropertyAvailable>
			<isPropertyAvailable property="BirthdayBondEnd"
				prepend="and">
				 <![CDATA[
				     birthday <= cast(#BirthdayBondEnd# as datetime)
				 ]]>
			</isPropertyAvailable>
			<isPropertyAvailable property="hobby" prepend="and">
				hobby like '%'||#hobby#||'%'
			</isPropertyAvailable>
		</dynamic>
	</select>
 

二,具体配置项

 

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" />

分享到:
评论

相关推荐

    iBATIS缓存介绍

    iBATIS提供了内置的缓存机制,可以轻松地配置和使用缓存,减轻开发者的负担,并且提供了多种缓存策略供选择。 ##### 2.3 iBATIS高速缓存和传统O/RM高速缓存的区别 iBATIS高速缓存相较于传统的对象关系映射(ORM)...

    iBATIS缓存

    iBATIS的缓存机制不仅限于简单的数据存储,还支持基于查询条件的缓存。通过设置`flushCache="true"`,可以在某些操作(如插入、更新或删除)后强制清空相应的一级或二级缓存,确保缓存中的数据与数据库保持同步。 ...

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

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

    解决IBatis缓存动态字段问题

    这种情况下,由于IBatis的缓存机制,可能导致字段找不到的问题。具体表现为:当第一次查询某个表时,IBatis会将查询结果中的字段名缓存起来;而在后续查询其他表时,如果这些表的字段与之前缓存的字段不一致,就会...

    iBATIS缓存的使用方法

    在数据库访问框架iBATIS中,缓存机制是一项重要的功能,它能够显著提高应用程序的性能。本文将详细介绍iBATIS中的缓存使用方法,包括缓存模型的配置、不同类型的缓存控制器以及如何在SQL映射文件中应用这些缓存设置...

    ibatis 缓存配置策略

    iBatis 提供了本地缓存机制,用于存储查询结果集,减少不必要的数据库访问。以下是对iBatis缓存配置策略的深入解析: 首先,iBatis 的 Cache 键(key)是由多个因素组成的,包括对象的hashCode、checksum、查询参数...

    ibatis-缓存使用示例

    本示例主要关注iBATIS的缓存功能,这是提升系统性能的重要机制。缓存可以减少对数据库的直接访问,从而降低系统负载,提高响应速度。 首先,iBATIS的缓存分为两种类型:一级缓存和二级缓存。一级缓存是SqlSession...

    iBATIS缓存介绍[借鉴].pdf

    通过上述介绍,我们可以看到iBATIS缓存机制是其性能优化的关键组成部分,通过合理的配置和选择合适的缓存策略,可以显著提升系统的响应速度和整体性能。在实际开发中,理解并掌握这些概念和配置方法,对于优化iBATIS...

    ibatis 缓存 - 24小时学习网.mht

    ibatis 缓存 - 24小时学习网ibatis 缓存 - 24小时学习网ibatis 缓存 - 24小时学习网ibatis 缓存 - 24小时学习网ibatis 缓存 - 24小时学习网

    Java_ibatis缓存技术

    在iBatis中,缓存被划分为一级缓存和二级缓存。 1. **一级缓存**:也称为SqlSession级别的缓存,是默认开启的。当我们在同一个SqlSession中执行相同的SQL查询时,如果第一次查询的结果已经存在于缓存中,那么第二次...

    ibatis_数据缓存

    iBatis 数据缓存机制是提高数据库访问性能的重要手段,它允许将查询结果存储在内存中,以便后续相同查询能够快速获取数据,而无需每次都执行SQL查询。在深入理解iBatis的Cache概念之前,首先需要知道iBatis是一个轻...

    从iBatis迁移到MyBatis

    9. **缓存机制**:MyBatis提供了一级缓存和二级缓存,可以提高数据查询的效率。 10. **集成测试**:MyBatis-Spring模块简化了在Spring应用中的集成测试,使得测试更加方便。 文件名 "MyBatis-3-User-Guide.pdf" 和...

    ibatis 数据缓存.pdf

    ibatis 数据缓存,讨论了ibatis 数据缓存方面的概念,即用法,用到ibatis 数据缓存的可以参考一下

    ibatis demo,ibatis例子,ibatis示例

    7. **缓存机制**:Ibatis内置了本地缓存和二级缓存,可以提高数据读取速度。本地缓存作用于单个SqlSession,而二级缓存则可以在多个SqlSession之间共享,但需要注意并发控制和数据一致性问题。 8. **插件支持**:...

    ibatis源码,ibatis源码 ibatis源码 ibatis源码

    源码中`org.apache.ibatis.cache.Cache`接口定义了缓存的基本操作,而具体的缓存实现如`org.apache.ibatis.cache.impl.PerpetualCache`则实现了缓存的存储和读取。 通过阅读和理解iBatis的源码,我们可以更深入地...

    ibatisDemo.zip

    5. **缓存机制**:Ibatis内置了本地缓存和二级缓存,能够提高数据读取速度,减少数据库压力。 接下来,我们来看看压缩包中的"ibatisDemo"可能包含的内容: - **CRUD示例**:这通常是一系列的Java类和XML配置文件,...

    ibatis开发指南 经典教材

    为了提高查询性能,ibatis内置了多种缓存机制,包括`MEMORY`类型缓存、`LRU`(Least Recently Used)型缓存、`FIFO`(First In First Out)型缓存和`OSCache`。其中,`MEMORY`类型缓存使用弱引用(WeakReference)来...

Global site tag (gtag.js) - Google Analytics