Java的MyBatis框架中XML映射缓存的使用教程
MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。默认情况下是没有开启缓存的,要开启二级缓存,你需要在你的SQL映射文件中添加一行:
<cache/>
字面上看就是这样。这个简单语句的效果如下:
1.映射语句文件中的所有select语句将会被缓存。
2.映射语句文件中的所有insert,update和delete语句会刷新缓存。
3.缓存会使用Least Recently Used(LRU,最近最少使用的)算法来收回。
4.根据时间表(比如 no Flush Interval,没有刷新间隔),缓存不会以任何时间顺序来刷新。
5.缓存会存储列表集合或对象(无论查询方法返回什么)的1024个引用。
6.缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。
所有的这些属性都可以通过缓存元素的属性来修改。比如:
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
这个更高级的配置创建了一个FIFO缓存,并每隔60秒刷新,存储结果对象或列表的512个引用,而且返回的对象被认为是只读的,因此在不同线程中的调用者之间修改它们会导致冲突。
可用的收回策略(eviction)有:
- LRU – 最近最少使用的:移除最长时间不被使用的对象。
- FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
- SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
- WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
默认的是 LRU。
flushInterval(刷新间隔)可以被设置为任意的正整数,而且它们代表一个合理的毫秒形式的时间段。默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新。
size(引用数目)可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的可用内存资源数目。默认值1024。
readOnly(只读)属性可以被设置为 true 或 false。只读的缓存会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。可读写的缓存会返回缓存对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认是false。
使用自定义缓存
除了这些自定义缓存的方式,你也可以通过实现你自己的缓存或为其他第三方缓存方案创建适配器来完全覆盖缓存行为。
<cache type=”com.domain.something.MyCustomCache”/>
这个示例展示了如何使用一个自定义的缓存实现。type 属性指定的类必须实现org.mybatis.cache.Cache 接口。这个接口是 MyBatis 框架中很多复杂的接口之一,但是简单给定它做什么就行。
public interface Cache { String getId(); int getSize(); void putObject(Object key, Object value); Object getObject(Object key); boolean hasKey(Object key); Object removeObject(Object key); void clear(); ReadWriteLock getReadWriteLock(); }
参照缓存
也许将来的某个时候,你会想在命名空间中共享相同的缓存配置和实例。在这样的情况下你可以使用 cache-ref 元素来引用另外一个缓存。
<cache-ref namespace=”com.someone.application.data.SomeMapper”/>
- mybatis(mybatis-plus)映射文件(XML文件)中特殊字符转义的实现
- Mybatis实现SQL映射的两种方法(xml文件形式和注解形式)
- Mybatis-config.xml中映射Mapper.xml文件遇到的错误及解决
- Java Mybatis的初始化之Mapper.xml映射文件的详解
- 解决Mybatis映射文件mapper.xml中的注释问题
- mybatis整合spring实现开启mapper.xml映射文件扫描
- mybatis映射文件mapper.xml的具体写法
- MyBatis中XML 映射文件中常见的标签说明
- mybatis框架的xml映射文件常用查询指南
- MyBatis中XML映射器的实现
相关文章
Java如何接收前端easyui datagrid传递的数组参数
这篇文章分享一下怎么在easyui的datagrid刷新表格时,在后端java代码中接收datagrid传递的数组参数,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧2023-11-11spring boot只需两步优雅整合activiti示例解析
这篇文章主要主要来教大家spring boot优雅整合activiti只需两步就可完成测操作示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步2022-03-03JAVA中 redisTemplate 和 jedis的配合使用操作
这篇文章主要介绍了JAVA中 redisTemplate 和 jedis的配合使用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2021-02-02Spring Cloud 整合 nacos实现动态配置中心的详细步骤
这篇文章主要介绍了Spring Cloud 整合 nacos 实现动态配置中心,整合步骤是通过添加依赖新建nacos配置,本文分步骤通过实例代码给大家详细讲解,需要的朋友可以参考下2022-10-10
最新评论