目录
五十八、MyBatis_缓存_第三方缓存整合原理&ehcache适配包下载
五十一、MyBatis_缓存_缓存介绍
对于任何一个持久化层框架来说,缓存时肯定要考虑在内的,MyBatis也有缓存机制,缓存的作用提高系统的运行速度,提升查询效率
比如第一次从数据库中查询菜单,放到缓存中
五十二、MyBatis_缓存_一级缓存体验
第一步:MyBatisTest.java文件
public class MyBatisTest {
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
/**
* 两级缓存
* 一级缓存:(本地缓存):
* 与数据库同一次会话期间查询到的数据会放在本地缓存中
* 以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库
*
* 二级缓存:(全局缓存)
*
*/
@Test
public void testFirstLevelCache() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try {
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
Employee emp = mapper.getEmpById(1);
System.out.println(emp);
//XXX
Employee emp2 = mapper.getEmpById(1);
System.out.println(emp2);
openSession.commit();
}finally {
openSession.close();
}
}
}
五十三、MyBatis_缓存_一级缓存失效的四种情况
/**
* 两级缓存
* 一级缓存:(本地缓存):sqlSession级别的缓存,一级缓存是一直开启的;SqlSession级别的一个Map
* 与数据库同一次会话期间查询到的数据会放在本地缓存中
* 以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库
*
* 一级缓存失效情况(没有使用到当前一级缓存的情况,效果就是,还需要再向数据库发出查询),
* 1、sqlSession不同
* 2、sqlSession相同,查询条件不同(当前一级缓存中还没有这个数据)
* 3、sqlSession相同,两次查询之间执行了增删改操作(这次增删改可能对当前数据有影响)
* 4、sqlSession相同,手动清除了一级缓存(缓存清空)
*
* 二级缓存:(全局缓存)
*
*/
@Test
public void testF