mybatis二级缓存默认
时间: 2023-07-03 21:30:56 浏览: 108
MyBatis 默认是开启二级缓存的,但是需要手动在映射文件中配置使用哪种缓存策略。可以通过在 `mapper` 标签中添加 `cache` 属性来指定缓存策略,如下所示:
```xml
<mapper namespace="com.example.mapper.UserMapper" cache="org.apache.ibatis.cache.impl.PerpetualCache">
<!-- mapper content -->
</mapper>
```
其中,`cache` 属性的值为缓存实现类的全限定名,默认的实现类是 `PerpetualCache`。
需要注意的是,开启二级缓存可能会引起脏读等问题,具体使用时需要谨慎。同时,MyBatis 也提供了相应的注解和 API 接口来操作二级缓存,可以根据具体需求进行使用。
相关问题
mybatis二级缓存默认设置
MyBatis 的二级缓存默认是关闭的,需要手动配置开启。在 MyBatis 的配置文件中,可以通过设置 `<cache>` 元素的 type 属性为 "org.apache.ibatis.cache.impl.PerpetualCache" 来开启二级缓存。
范例:<<引用:MyBatis 的二级缓存默认是关闭的,需要手动配置开启。在 MyBatis 的配置文件中,可以通过设置 <cache> 元素的 type 属性为 "org.apache.ibatis.cache.impl.PerpetualCache" 来开启二级缓存。>>
怎么用源码解释mybatis二级缓存的默认LRU属性
Mybatis的二级缓存的默认实现是基于LRU(Least Recently Used,最近最少使用)算法的。LRU算法会将最近最少使用的缓存对象淘汰掉,保留最近使用频率较高的缓存对象。
Mybatis的二级缓存是由`org.apache.ibatis.cache.impl.PerpetualCache`类实现的。该类中有一个`HashMap`类型的`cache`属性,用于存放缓存数据。在该类的构造函数中,会将`cache`属性初始化为一个LRU算法实现的`LinkedHashMap`对象:
```java
public PerpetualCache(String id) {
this.id = id;
this.cache = new LinkedHashMap<Object, Object>(DEFAULT_SIZE, .75F, true) {
private static final long serialVersionUID = 1L;
// 当LinkedHashMap中的元素个数超过了DEFAULT_SIZE时,会调用该方法移除最老的元素
@Override
protected boolean removeEldestEntry(Map.Entry<Object, Object> eldest) {
return size() > DEFAULT_SIZE;
}
};
}
```
在上述代码中,`LinkedHashMap`的第三个参数`true`表示启用accessOrder(按访问顺序排序),即当通过`get()`方法获取缓存数据时,会将该数据移动到链表的尾部,以便在淘汰缓存数据时能够优先淘汰最久未使用的数据。
因此,当使用Mybatis默认二级缓存实现时,会自动启用LRU算法,且最大缓存对象数量为1024个。如果需要自定义缓存配置,可以通过在Mybatis配置文件中添加`<cache>`标签来实现。
阅读全文