首先
下面说一下具体配置。
1,sqlMapConfig.xml中配置
1.1.SqlMapConfig.xml中
2.<settings
3.cacheModelsEnabled="true" //设置为true
4.enhancementEnabled="true"
5.lazyLoadingEnabled="true"
6..............
7./>
2,配置具体的sqlMap.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>
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, 只读.
所谓只读,只是说建议您在开发的时候,对于配置为只读的缓存,不要进行更新操作,这样可能会出现问题,比如可能会出现同步的问题,因为当您访问只读缓存的时候,框架直接将缓存中对象的引用返回给你,如果多个线程试图对其修改,就有可能出现同步问题。
可读写缓存与只读缓存的区别是,当你访问缓存中的数据时,缓存会返回给你一个原数据的副本,而不是直接将原数据的引用返回给你。这样即使是多线程,由于各自用于一个完全一样的副本,也不回出现线程同步的问题。可读写缓存配置时需要使用:readOnly="false"
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 的缓存机制使用必须特别谨慎。特别是flushOnExecute 的设定,需要考虑到所有可能引起实际数据与缓存数据不符的操作。如本模块中其他Statement对数据的更新,其他模块对数据的更新,甚至第三方系统对数据的更新。否则,脏数据的出现将为系统的正常运行造成极大隐患。
如果你不能确定,或者数据库同时由其它系统共用,你不能完全控制数据何时被更新,就不能使用Ibatis提供的缓存机制,否则就会出现查询出不是最新数据的问题。
分享到:
相关推荐
### iBATIS缓存的使用方法 在数据库访问框架iBATIS中,缓存机制是一项重要的功能,它能够显著提高应用程序的性能。本文将详细介绍iBATIS中的缓存使用方法,包括缓存模型的配置、不同类型的缓存控制器以及如何在SQL...
iBATIS提供了内置的缓存机制,可以轻松地配置和使用缓存,减轻开发者的负担,并且提供了多种缓存策略供选择。 ##### 2.3 iBATIS高速缓存和传统O/RM高速缓存的区别 iBATIS高速缓存相较于传统的对象关系映射(ORM)...
这种情况下,由于IBatis的缓存机制,可能导致字段找不到的问题。具体表现为:当第一次查询某个表时,IBatis会将查询结果中的字段名缓存起来;而在后续查询其他表时,如果这些表的字段与之前缓存的字段不一致,就会...
在"Test_ibatis"这个测试文件中,可能包含了演示如何配置和使用iBATIS缓存的代码。通常,这会包括以下步骤: 1. 配置缓存:在Mapper XML文件中,通过`<cache>`元素定义缓存配置,比如设置 eviction(驱逐策略)、...
本文将重点介绍ibatis的二级缓存配置和使用方法。 #### 二、ibatis二级缓存配置详解 在ibatis的配置文件中,可以通过`<cacheModel>`元素来配置二级缓存。这个元素允许开发人员定义缓存的类型、刷新策略以及其他...
iBatis 提供了本地缓存机制,用于存储查询结果集,减少不必要的数据库访问。以下是对iBatis缓存配置策略的深入解析: 首先,iBatis 的 Cache 键(key)是由多个因素组成的,包括对象的hashCode、checksum、查询参数...
通过上述介绍,我们可以看到iBATIS缓存机制是其性能优化的关键组成部分,通过合理的配置和选择合适的缓存策略,可以显著提升系统的响应速度和整体性能。在实际开发中,理解并掌握这些概念和配置方法,对于优化iBATIS...
iBatis 数据缓存机制是提高数据库访问性能的重要手段,它允许将查询结果存储在内存中,以便后续相同查询能够快速获取数据,而无需每次都执行SQL查询。在深入理解iBatis的Cache概念之前,首先需要知道iBatis是一个轻...
iBatis 提供了缓存机制,可以在一定程度上提高查询效率。同时,通过合理设计SQL语句,避免全表扫描,使用索引等方法,也能有效提升性能。 10. **错误处理与调试**: 在开发过程中,iBatis的异常信息通常很详细,...
7. **缓存机制**:Ibatis内置了本地缓存和二级缓存,可以提高数据读取速度。本地缓存作用于单个SqlSession,而二级缓存则可以在多个SqlSession之间共享,但需要注意并发控制和数据一致性问题。 8. **插件支持**:...
Ibatis 提供了一些基本的API,如查询、添加、删除和修改方法。通常,会通过 SqlMapClient 的工厂类创建 SqlMapClient 实例,以管理数据库操作。例如,使用 SqlMapClientBuilder 创建 SqlMapClient 对象,然后执行...
这个入门级别的教程将引导你了解 Ibatis 的基本概念和使用方法,包括增删改查操作、多条件查询以及单对象和数据集合查询。 1. **安装与配置** 在开始使用 Ibatis 之前,你需要在项目中引入 Ibatis 的依赖。如果是 ...
"iBatis开发指南"则是更全面的官方文档,它包含了iBatis的所有特性和使用方法。从中,你可以学习到动态SQL的使用,这是一种强大的特性,允许你在运行时根据条件动态地构建SQL语句。此外,还有关于事务管理、缓存机制...
Ibatis提供了本地缓存和二级缓存机制,可以有效减少对数据库的访问,提高系统性能。 #### 3.4 自动事务管理 通过SqlSession,Ibatis可以自动管理数据库事务,简化事务控制。 ## 4. Ibatis的使用步骤 1. 创建SQL...
6. 缓存:Ibatis提供了本地缓存和二级缓存机制,有助于提高性能。 7. 执行性能:提供优化建议,如批处理、缓存使用等,以提升应用程序的运行效率。 总之,Ibatis是一个强大且灵活的Java持久层框架,其API、文档和...
- 缓存机制:讲解iBATIS的缓存策略,如何启用和配置缓存以提高性能。 - 异常处理:介绍iBATIS抛出的异常类型及其处理方式。 - 批量操作:如何利用iBATIS进行批量插入、更新或删除。 - 动态SQL的最佳实践:分享...
书中深入浅出地介绍了Ibatis的基本用法和高级特性,包括动态SQL、结果映射、参数映射、缓存机制、事务控制等。此外,它还讨论了如何结合Spring框架进行整合使用,以及如何解决在实际项目中可能遇到的问题。通过阅读...
7. **缓存机制**:解释iBATIS的缓存策略,包括本地缓存和二级缓存,以及如何自定义缓存实现。 8. **事务管理**:讨论iBATIS如何处理数据库事务,包括自动提交、手动提交和回滚操作。 9. **错误处理与调试**:分享...
- **性能优化与缓存**:了解如何利用iBATIS的缓存机制来提高应用性能,减少数据库访问次数。 - **数据访问对象(DAO)模式**:深入研究iBATIS如何支持DAO模式,简化数据访问逻辑,实现业务逻辑与数据访问的分离。 - ...