Ibatis缓存

来源:互联网 发布:物理轨迹软件 编辑:程序博客网 时间:2024/06/06 01:52

      当前,Hibernate和Ibatis是比较流行的持久层框架,二者有像是之处,又有很多不同的地方。熟悉Hibernate的程序员,刚开始接触Ibatis时很难理解它的缓存机制。Ibatis是一个半自动的持久层框架,它没有Hibernate那么智能。其缓存机制就能说明这一点。如果你使用可读写缓存,对数据库进行更新后,缓存并没有同时被更新,如果你需要在更新了数据库的同时,保证下次查询的时候,从缓存中读取的数据也是最新的,你就需要刷新缓存(flashOnExecute="methodName")。通过配置flashOnExecute,就可以在执行某一个方法时,刷新缓存(注意:这里说刷新缓存,并不是立即修改缓存,而是你下次访问的缓存的时候,缓存会去数据读取最新的数据)。.

     Ibatis的缓存分为两种:只读缓存和可读写缓存。

     所谓只读,只是说建议您在开发的时候,对于配置为只读的缓存,不要进行更新操作,这样可能会出现问题,比如可能会出现同步的问题,因为当您访问只读缓存的时候,框架直接将缓存中对象的引用返回给你,如果多个线程试图对其修改,就有可能出现同步问题。但是,如果你非要进行写操作,程序也不会抛出异常。配置只读缓存时,需要使用:

readOnly="true"

     可读写缓存与只读缓存的区别是,当你访问缓存中的数据时,缓存会返回给你一个原数据的副本,而不是直接将原数据的引用返回给你。这样即使是多线程,由于各自用于一个完全一样的副本,也不回出现线程同步的问题。可读写缓存配置时需要使用:

readOnly="false"

默认情况下,Ibatis提供的是只读缓存。

另外,使用Ibatis的缓存时,你必须确定系统表的数据是有哪些方法来更新的,对这些方法配置flushOnExecute。如果你不能确定,或者数据库同时由其它系统共用,你不能完全控制数据何时被更新,就不能使用Ibatis提供的缓存机制,否则就会出现查询出不是最新数据的问题。