mybatis的二级缓存

二级缓存是namespace级别的缓存。

1. 开启二级缓存

修改mybatis-config.xml的setting配置


修改对应的mapper文件,在namespace下面添加cache的标签


cache标签可以配置的属性

  • eviction 缓存的相关策略

    • FIFO 先进先出的策略
    • LRU 最近最久未使用调出
    • WEAK 弱引用
    • SOFT 软引用
  • flushInterval 缓存刷新的毫秒数

  • readOnly 是否只读

    • true 是只读,返回引用,速度快但是不安全,同时不要求resultType的POJO类实现Serializable
    • false 通过序列化和反序列化返回,速度比上面的慢同时安全,要求resultType的POJO类实现Serializable,否则会报错
  • size 缓存的大小

  • type 整合第三方缓存的全类名,可以查看github的mybatis项目,上面有各种mybatis整合第三方cache的示例,https://github.com/mybatis
    关键就是实现mybatis的cache接口的方法

2. 效果展示

相关的建表语句啥的见上文。

package com.zihao.test;

import com.zihao.mapper.DeptMapper;
import com.zihao.model.Department;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

/**
 * 二级缓存对于同一namespace的有效
 * 1) 开启关闭的是二级缓存
 * 2) mapper文件中写明 
 * 3)readOnly=false的时候 class实现序列化接口
 * 4)对象不是同一个对象 readOnly=false的时候,readOnly=true的时候一个对象
 * 5) 细粒度的控制  
    没影响 
    影响该select的二级缓存