ibatis缓存初探(1)

一,IBATIS 缓存机制使用

1,sqlMapConfig.xml中配置

1.SqlMapConfig.xml中
<settings
cacheModelsEnabled="true" //设置为true
enhancementEnabled="true"
lazyLoadingEnabled="true"
.............
/> 

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

Xml代码

cacheModelsEnabled="false" 

Xml代码

cacheModelsEnabled="true"  是默认的,无须配置也可,建议配置

2,配置具体的sqlMap.xml

Xml代码

<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缓存初探(1)

时间: 2024-10-03 10:56:36

ibatis缓存初探(1)的相关文章

ibatis缓存机制cacheModel

cachemodel是ibatis里面自带的缓存机制,正确的应用能很好提升我们系统的性能. 使用方法:在sqlmap的配置文件中加入 <cacheModel type="LRU" id="vclass_cache" readOnly="true" serialize="false"> <flushInterval hours="24"/> <flushOnExecute sta

SpringCache缓存初探

body,table tr { background-color: #fff } table tr td,table tr th { border: 1px solid #ccc; text-align: left; padding: 6px 13px; margin: 0 } pre code,table,table tr { padding: 0 } hr,pre code { background: 0 0 } body { font: 16px Helvetica, Arial, san

MyBatis结果映射与MyBatis缓存初探学习记录

MyBatis高级结果映射(一对一.一对多.多对多的映射),延迟加载,查询缓存(一级缓存),二级缓存的学习记录: 1.学习中所使用到的例子,数据库基础分析 2.高级结果映射 3.延迟加载 4.一级缓存 5.二级缓存 1.学习中所使用到的例子,数据库基础分析 2.高级结果映射 resultType与resultMap: resultType来进行结果映射,数据库中查询几条记录,那么在resultType就会映射成几条记录:resultType映射是一个平铺式的映射: resultMap比较繁琐一些

缓存初探

我发现我每次写博客都不太会开头,这里从网络请求三步骤开始吧:请求.处理.响应. 前端缓存主要是在“请求”和“响应”中进行.在请求步骤中,浏览器通过缓存能减少发送请求次数:在响应步骤中,浏览器和服务器相互配合,通过减少响应的内容从而减少传输时间 缓存位置优先级由上至下: Service worker memory cache disk cache 网络请求: 从Chrome开发者工具的Network —> size一栏可以看到请求处理方式: 如果是显示数字,几k或者几M,则是表示是从网络传输的 其

ibatis缓存配置

一.sqlmapconfig.xml <sqlMapConfig> <settings useStatementNamespaces="true"  cacheModelsEnabled="true"/> </sqlMapConfig> 二.实体类xml <cacheModel id="query_cache_menu" readOnly="false" serialize="

图片内容缓存技术。

在Android加载网络图片一章中当滚动屏幕时会不但调用异步任务重新加载图片,这样即浪费网络资源用户体验也不好,那么我们可以将图片缓存起来,要显示时先从缓存获取.图片缓存的实现分为两种一种内存缓存,一种文件缓存. 内存缓存Google已经帮我们实现,通过LruCache你可以非常方便快速的实现内存缓存. 先简单了解下LruCache原理,Lru是最近最少使用的意思,要做内存缓存首先需要定义缓存空间大小,当缓存空间不够时,系统回收部份内存空间,回收依据是什么呢,这里采用的便是Lru算法,将最近最少

Android动态绘图实现

一直想实现一个动态绘图的功能,就是那种给定几张图片之后一张张的顺序画出来.说不明白,先上效果图. 这样可以做很多东西,像百度地图的历史轨迹绘制,引导界面做类似动画效果等. 之前我考虑用SurfaceView实现这个功能,想一想,要实现这种效果,需要开启一个子线程用于控制绘制时间间隔,以达到这种渐渐绘制的效果.动手去做了,发现用SurfaceView很难实现,SurfaceView中的Canvas与View中的Canvas不同,一个不同之处是View中的Canvas是只有一张画布,然后不停的在这张

Mybatis缓存报错org.apache.ibatis.exceptions.PersistenceException

错误信息如下: org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.apache.ibatis.cache.CacheException: Error deserializing object. Cause: java.lang.ClassNotFoundException: com.kytsoft.model.Adminlink ### Cause: org.apa

ibatis中使用缓存

简单在ibatis中使用cache 首先设置SqlMapConfig.xml中<settings/>节点的属性cacheModelsEnabled="true"    然后在具体sqlmap文件中书写<cacheModel>    <cacheModel id="product-cache" type="LRU">       <flushInterval hours="24"/>