mybatis缓存-创新互联
目录
创新互联公司是一家专业提供裕华企业网站建设,专注与成都网站设计、成都做网站、H5场景定制、小程序制作等业务。10年已为裕华众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。1、MyBatis的一级缓存
2、MyBatis的二级缓存
2.1二级缓存的相关配置
3.MyBatis缓存查询的顺序
4.整合第三方缓存EHCache
1、MyBatis的一级缓存 一级缓存(默认开启)是 SqlSession级别 的,通过同一个 SqlSession 查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访问。 一级缓存 不用我们手动操作,而且我们是关闭不了的!!但是我们可以手动清除缓存。
sqlSession.clearCache();
使一级缓存失效的四种情况:
1)
不同的
SqlSession
对应不同的一级缓存
2)
同一个
SqlSession
但是查询条件不同
3)
同一个
SqlSession
两次查询期间执行了任何一次增删改操作
4)
同一个
SqlSession
两次查询期间手动清空了缓存
@Test
public void testOneCache(){
SqlSession sqlSession1 = SqlSessionUtils.getSqlSession();
CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
Emp emp1 = mapper1.getEmpByEid(1);
System.out.println(emp1);
Emp emp2 = mapper1.getEmpByEid(1);
System.out.println(emp2);
}
查询同一个语句两次,第二次没有从数据库去查,直接输出缓存中的内容
SqlSession不同时就会分别从不同的SqlSession中查数据库
2、MyBatis的二级缓存 二级缓存是 SqlSessionFactory 级别,通过同一个 SqlSessionFactory 创建的 SqlSession 查询的结果会被缓存;此后若再次执行相同的查询语句,结果就会从缓存中获取 二级缓存开启的条件: a>在核心配置文件中,设置全局配置属性 cacheEnabled="true" ,默认为 true ,不需要设置 b>在映射文件中设置标签
c>二级缓存必须在
SqlSession
关闭或提交之后有效
sqlSession.close();
sqlSession.commit();
d>查询的数据所转换的实体类类型
必须实现序列化的接口
使二级缓存失效的情况:
两次查询之间执行了任意的增删改,会使一级和二级缓存同时失效
二级缓存不能再用工具类SqlSessionUtils
public class SqlSessionUtils {
public static SqlSession getSqlSession(){
SqlSession sqlSession = null;
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
sqlSession = sqlSessionFactory.openSession(true);
} catch (IOException e) {
e.printStackTrace();
}
return sqlSession;
}
}
二级缓存必须在SqlSession关闭或提交之后有效
@Test
public void testTwoCache(){
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession1 = sqlSessionFactory.openSession(true);
CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
System.out.println(mapper1.getEmpByEid(1));
sqlSession1.close();
SqlSession sqlSession2 = sqlSessionFactory.openSession(true);
CacheMapper mapper2 = sqlSession2.getMapper(CacheMapper.class);
System.out.println(mapper2.getEmpByEid(1));
sqlSession2.close();
} catch (IOException e) {
e.printStackTrace();
}
}
缓存命中率(Cache Hit Ratio):就是看查询的数据在缓存中有没有。
2.1二级缓存的相关配置在mapper配置文件中添加的cache标签可以设置一些属性:
- eviction属性:缓存回收策略
- flushInterval属性:刷新间隔,单位毫秒默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句(增删改)时刷新
- size属性:引用数目,正整数 代表缓存最多可以存储多少个对象,太大容易导致内存溢出
- readOnly属性:只读,true/false
- 先查询二级缓存,因为二级缓存中可能会有其他程序已经查出来的数据,可以拿来直接使用。
- 如果二级缓存没有命中,再查询一级缓存
- 如果一级缓存也没有命中,则查询数据库
- SqlSession关闭之后,一级缓存中的数据会写入二级缓存
虽然是第三方缓存,但实现的功能与二级缓存相同
a>添加依赖org.mybatis.caches mybatis-ehcache1.2.1 ch.qos.logback logback-classic1.2.3
b>各
jar
包功能
jar 包名称 | 作用 |
mybatis-ehcache | Mybatis 和 EHCache 的整合包 |
ehcache | EHCache 核心包 |
slf4j-api | SLF4J 日志门面包 |
logback-classic | 支持 SLF4J 门面接口的一个具体实现 |
c>创建EHCache的配置文件(resources文件夹下)ehcache.xml(必须叫这个名字)
d>设置二级缓存的类型
不加type使用的是二级缓存默认的
e>加入
logback
日志
存在
SLF4J
时,作为简易日志的
log4j
将失效,此时我们需要借助
SLF4J
的具体实现
logback
来打印日志。
创建
logback的配置文件(resources文件夹下)logback.xml
[%d{HH:mm:ss.SSS}] [%-5level] [%thread] [%logger] [%msg]%n
f>EHCache
配置文件说明
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享文章:mybatis缓存-创新互联
本文地址:http://scjbc.cn/article/doghoc.html