- 浏览: 1051836 次
- 性别:
- 来自: 郑州
文章分类
- 全部博客 (605)
- 数据挖掘 (22)
- spring (40)
- 工具使用 (39)
- java (137)
- JavaScript (40)
- webwork (12)
- web (120)
- 资源 (7)
- SSH (5)
- oracle (20)
- J2ME (1)
- 环境配置 (37)
- 项目管理 (29)
- mysql (14)
- struts (4)
- 项目总结 (27)
- ibatis学习 (33)
- 学习计划 (2)
- 缓存 (7)
- 重构 (3)
- Android (1)
- jquery (12)
- UML (3)
- 用户体验 (4)
- 习惯 (7)
- sakai (1)
- urlrewrite (4)
- rss (5)
- C plus plus (5)
- 算法 (5)
- 海量数据处理 (7)
- office(word、excel) (1)
- 面试题 (3)
- solr (8)
- 大数据 (2)
最新评论
-
hujin19861102:
截图看不见,最后一个webwrok的配置看不见
Ext+Webwork+Json 实现分页表格查询效果 -
蜗牛笔:
弱弱的问一句,要是分出来的词在词典中没有,那么两部分的pos- ...
ICTCLAS 中科院分词系统 -
weipeng1986:
授人予鱼不如授人予鱼,我想问你的是你是怎么总结的。比如第四种情 ...
JAVA中字符串连接效率的测试 -
xiaoqiang2008:
执行两次的原因是什么,好像楼主没弄清楚啊!是不是在web.xm ...
关于Spring中用quartz定时器在定时到达时同时执行两次的问题 -
Kent_Mu:
...
ibatis-dynamic的用法
ibatis 缓存机制初探
一,IBATIS 缓存机制使用
1,sqlMapConfig.xml中配置
- 1.SqlMapConfig.xml中
- <settings
- cacheModelsEnabled="true" //设置为true
- enhancementEnabled="true"
- lazyLoadingEnabled="true"
- .............
- />
1.SqlMapConfig.xml中 <settings cacheModelsEnabled="true" //设置为true enhancementEnabled="true" lazyLoadingEnabled="true" ............. />
注意点,k,必须配置settings这个标签,否则
cacheModelsEnabled="false"
cacheModelsEnabled="true" 是默认的,无须配置也可,建议配置
2,配置具体的sqlMap.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>
<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" />
发表评论
-
list in传参 与批量插入 批量更新
2017-04-01 10:48 817传入一个map的参数,map里有一个tenantIds的Lis ... -
ibatis in ##的问题
2012-11-02 13:25 854http://www.hake.cc/a/biancheng/ ... -
ibatis缓存强制刷新与命中率
2012-10-19 19:06 1393缓存强制刷新: // spring注入 private Sq ... -
数据日志记录讨论
2011-10-26 18:51 952详情见附件中的PPT -
Ibatis的类型处理器TypeHandler解析
2011-10-24 16:28 3328原文来自: http://blog.csdn.net/lovi ... -
ibatis mysql 字段 tinyint(1) map应用要小心
2011-10-20 18:18 4003http://www.mysqlab.net/docs/ref ... -
spring+ibatis注解方式注入
2011-10-15 17:24 1033http://www.cnblogs.com/archie20 ... -
webwork+spring+ibatis注解培训文档
2011-08-15 17:26 1397今天整理了 spring 注解的使用,主要是结合公司 ... -
ibatis知识点收藏
2011-07-08 23:11 9171. 原来如此,所以在遍历之前要设置被跌代对象 h ... -
iBATIS自动生成主键
2011-07-08 22:50 997我们在数据库插入一条 ... -
ibatis配置log4j输出sql语句等日志信息
2011-07-08 22:47 1607总结步骤如下: 建立一个log4j.properties文 ... -
iBATIS一对多/多对多N+1问题解决方案
2011-07-08 22:30 1210对于iBATIS一对多/多对多的问题,传统的办法是在一对多/多 ... -
强制刷新Ibatis中的缓存(OSCache)
2011-07-08 22:21 1451持久层使用Ibatis,并开启动缓存 后台画面可用如下代码强制 ... -
让sqlmap文件 "继承" 起来
2011-07-08 22:18 1452多个项目中使用ibatis , 和数据库表对应的 sqlmap ... -
Ibatis比较少人使用的配置语法
2011-07-08 22:12 1653简单来说,ibatis3虽然没有ognl,不过也支持基本的表达 ... -
ibatis查询返回java.util.HashMap结果列表
2011-07-08 22:00 8212DAO的实现类中的代码: Java代码 ... -
ibatis使用总结(转)
2011-05-27 23:21 1561SqlMap的配置是iBatis中应 ... -
ibatis配置详解
2011-05-27 10:26 1122ibatis配置详解 ibatis与hi ... -
ibatis配置文件的namespace
2011-05-27 10:20 2907ibatis的配置文件中有一个命名空间的属性,如<sql ... -
ibatis配置多表关联(一对一、一对多、多对多)
2011-05-27 08:41 1352iBatis的多表关联。 ibatis的表关联,和数据库语句 ...
相关推荐
iBATIS提供了内置的缓存机制,可以轻松地配置和使用缓存,减轻开发者的负担,并且提供了多种缓存策略供选择。 ##### 2.3 iBATIS高速缓存和传统O/RM高速缓存的区别 iBATIS高速缓存相较于传统的对象关系映射(ORM)...
iBATIS的缓存机制不仅限于简单的数据存储,还支持基于查询条件的缓存。通过设置`flushCache="true"`,可以在某些操作(如插入、更新或删除)后强制清空相应的一级或二级缓存,确保缓存中的数据与数据库保持同步。 ...
ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园
这种情况下,由于IBatis的缓存机制,可能导致字段找不到的问题。具体表现为:当第一次查询某个表时,IBatis会将查询结果中的字段名缓存起来;而在后续查询其他表时,如果这些表的字段与之前缓存的字段不一致,就会...
在数据库访问框架iBATIS中,缓存机制是一项重要的功能,它能够显著提高应用程序的性能。本文将详细介绍iBATIS中的缓存使用方法,包括缓存模型的配置、不同类型的缓存控制器以及如何在SQL映射文件中应用这些缓存设置...
iBatis 提供了本地缓存机制,用于存储查询结果集,减少不必要的数据库访问。以下是对iBatis缓存配置策略的深入解析: 首先,iBatis 的 Cache 键(key)是由多个因素组成的,包括对象的hashCode、checksum、查询参数...
通过上述介绍,我们可以看到iBATIS缓存机制是其性能优化的关键组成部分,通过合理的配置和选择合适的缓存策略,可以显著提升系统的响应速度和整体性能。在实际开发中,理解并掌握这些概念和配置方法,对于优化iBATIS...
ibatis 缓存 - 24小时学习网ibatis 缓存 - 24小时学习网ibatis 缓存 - 24小时学习网ibatis 缓存 - 24小时学习网ibatis 缓存 - 24小时学习网
本示例主要关注iBATIS的缓存功能,这是提升系统性能的重要机制。缓存可以减少对数据库的直接访问,从而降低系统负载,提高响应速度。 首先,iBATIS的缓存分为两种类型:一级缓存和二级缓存。一级缓存是SqlSession...
在iBatis中,缓存被划分为一级缓存和二级缓存。 1. **一级缓存**:也称为SqlSession级别的缓存,是默认开启的。当我们在同一个SqlSession中执行相同的SQL查询时,如果第一次查询的结果已经存在于缓存中,那么第二次...
iBatis 数据缓存机制是提高数据库访问性能的重要手段,它允许将查询结果存储在内存中,以便后续相同查询能够快速获取数据,而无需每次都执行SQL查询。在深入理解iBatis的Cache概念之前,首先需要知道iBatis是一个轻...
ibatis 数据缓存,讨论了ibatis 数据缓存方面的概念,即用法,用到ibatis 数据缓存的可以参考一下
7. **缓存机制**:Ibatis内置了本地缓存和二级缓存,可以提高数据读取速度。本地缓存作用于单个SqlSession,而二级缓存则可以在多个SqlSession之间共享,但需要注意并发控制和数据一致性问题。 8. **插件支持**:...
源码中`org.apache.ibatis.cache.Cache`接口定义了缓存的基本操作,而具体的缓存实现如`org.apache.ibatis.cache.impl.PerpetualCache`则实现了缓存的存储和读取。 通过阅读和理解iBatis的源码,我们可以更深入地...
5. **缓存机制**:Ibatis内置了本地缓存和二级缓存,能够提高数据读取速度,减少数据库压力。 接下来,我们来看看压缩包中的"ibatisDemo"可能包含的内容: - **CRUD示例**:这通常是一系列的Java类和XML配置文件,...
总结,Ibatis提供了灵活的SQL映射机制,使得开发人员能够更好地控制SQL的执行。同时,通过与Struts和Spring的整合,可以构建出强大的企业级应用。理解并熟练掌握这些知识点,对于提升Java Web开发的效率和质量至关...
为了提高查询性能,ibatis内置了多种缓存机制,包括`MEMORY`类型缓存、`LRU`(Least Recently Used)型缓存、`FIFO`(First In First Out)型缓存和`OSCache`。其中,`MEMORY`类型缓存使用弱引用(WeakReference)来...