`
shyboy0358
  • 浏览: 35607 次
文章分类
社区版块
存档分类
最新评论

ibatiS的缓存机制用法

 
阅读更多
首先
下面说一下具体配置。
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中,缓存机制是一项重要的功能,它能够显著提高应用程序的性能。本文将详细介绍iBATIS中的缓存使用方法,包括缓存模型的配置、不同类型的缓存控制器以及如何在SQL...

    iBATIS缓存介绍

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

    解决IBatis缓存动态字段问题

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

    ibatis-缓存使用示例

    在"Test_ibatis"这个测试文件中,可能包含了演示如何配置和使用iBATIS缓存的代码。通常,这会包括以下步骤: 1. 配置缓存:在Mapper XML文件中,通过`&lt;cache&gt;`元素定义缓存配置,比如设置 eviction(驱逐策略)、...

    Java ibatis缓存技术

    本文将重点介绍ibatis的二级缓存配置和使用方法。 #### 二、ibatis二级缓存配置详解 在ibatis的配置文件中,可以通过`&lt;cacheModel&gt;`元素来配置二级缓存。这个元素允许开发人员定义缓存的类型、刷新策略以及其他...

    ibatis 缓存配置策略

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

    iBATIS缓存介绍[借鉴].pdf

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

    ibatis_数据缓存

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

    iBatis Web用法实例

    iBatis 提供了缓存机制,可以在一定程度上提高查询效率。同时,通过合理设计SQL语句,避免全表扫描,使用索引等方法,也能有效提升性能。 10. **错误处理与调试**: 在开发过程中,iBatis的异常信息通常很详细,...

    ibatis demo,ibatis例子,ibatis示例

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

    ibatis的使用教程

    Ibatis 提供了一些基本的API,如查询、添加、删除和修改方法。通常,会通过 SqlMapClient 的工厂类创建 SqlMapClient 实例,以管理数据库操作。例如,使用 SqlMapClientBuilder 创建 SqlMapClient 对象,然后执行...

    ibatis入门

    这个入门级别的教程将引导你了解 Ibatis 的基本概念和使用方法,包括增删改查操作、多条件查询以及单对象和数据集合查询。 1. **安装与配置** 在开始使用 Ibatis 之前,你需要在项目中引入 Ibatis 的依赖。如果是 ...

    iBatis开发指南和一个iBatis实例

    "iBatis开发指南"则是更全面的官方文档,它包含了iBatis的所有特性和使用方法。从中,你可以学习到动态SQL的使用,这是一种强大的特性,允许你在运行时根据条件动态地构建SQL语句。此外,还有关于事务管理、缓存机制...

    ibatis基础知识详解

    Ibatis提供了本地缓存和二级缓存机制,可以有效减少对数据库的访问,提高系统性能。 #### 3.4 自动事务管理 通过SqlSession,Ibatis可以自动管理数据库事务,简化事务控制。 ## 4. Ibatis的使用步骤 1. 创建SQL...

    ibatis api,ibatis文档,ibatis说明文档

    6. 缓存:Ibatis提供了本地缓存和二级缓存机制,有助于提高性能。 7. 执行性能:提供优化建议,如批处理、缓存使用等,以提升应用程序的运行效率。 总之,Ibatis是一个强大且灵活的Java持久层框架,其API、文档和...

    IBatis.NET开发文档

    - 缓存机制:讲解iBATIS的缓存策略,如何启用和配置缓存以提高性能。 - 异常处理:介绍iBATIS抛出的异常类型及其处理方式。 - 批量操作:如何利用iBATIS进行批量插入、更新或删除。 - 动态SQL的最佳实践:分享...

    ibatis 资料大全

    书中深入浅出地介绍了Ibatis的基本用法和高级特性,包括动态SQL、结果映射、参数映射、缓存机制、事务控制等。此外,它还讨论了如何结合Spring框架进行整合使用,以及如何解决在实际项目中可能遇到的问题。通过阅读...

    ibatis 开发指南 和 iBATIS-SqlMaps两本图书

    7. **缓存机制**:解释iBATIS的缓存策略,包括本地缓存和二级缓存,以及如何自定义缓存实现。 8. **事务管理**:讨论iBATIS如何处理数据库事务,包括自动提交、手动提交和回滚操作。 9. **错误处理与调试**:分享...

    IBATIS_IN_ACTION

    - **性能优化与缓存**:了解如何利用iBATIS的缓存机制来提高应用性能,减少数据库访问次数。 - **数据访问对象(DAO)模式**:深入研究iBATIS如何支持DAO模式,简化数据访问逻辑,实现业务逻辑与数据访问的分离。 - ...

Global site tag (gtag.js) - Google Analytics