Hello,明天给各位童鞋们分享Mybaits缓存,连忙拿出小本子记下来吧!
1.一级缓存
本地缓存
与数据库同一次会话期间查问到的数据会放在本地缓存中
当前如果须要获取雷同的数据,间接从缓存中拿
一级缓存是主动开启的。上面的4种办法是使得一级缓存生效的
1.sqlSession不同
2.sqlSession雷同,查问条件不同
3.sqlSession雷同,查问期间执行了增删操作
4.手动革除了一级缓存
1.1 一级缓存初体验
@Testpublic void test1()throws Exception{ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession openSession = sqlSessionFactory.openSession(); EmployMapper mapper = openSession.getMapper(EmployMapper.class); Employee id = mapper.getId(2); System.out.println(id); Employee id1 = mapper.getId(2); System.out.println(id1); openSession.close();}
因为有一级缓存的缘故,所以不必再调用sqlSession
1.2 一级缓存生效
sqlSession不同
@Testpublic void test1()throws Exception{ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession openSession = sqlSessionFactory.openSession(); EmployMapper mapper = openSession.getMapper(EmployMapper.class); Employee id = mapper.getId(2); System.out.println(id); SqlSession openSession1 = sqlSessionFactory.openSession(); EmployMapper mapper1 = openSession1.getMapper(EmployMapper.class); Employee id1 = mapper1.getId(2); System.out.println(id1); openSession.close();}
因为SqlSession的不同
使得没有缓存
2.sqlSession雷同,查问条件不同
3.sqlSession雷同,查问期间执行了增删操作
4.手动革除了一级缓存
执行了openSession.clearCache()办法
2.二级缓存
全局缓存
是基于namespace级别的缓存,一个namespace对一个二级缓存
1.查问一条数据,放在一级缓存
2.如果会话敞开,一级到二级,新的会话信息,会参照二级缓存
3.不同的namespace会放在不同的map中,不同的二级缓存中
2.1 开启二级缓存
<settings>
<!--//开启二级缓存-->
<setting name="cacheEnabled" value="true"/>
</settings>
开启二级缓存
test.java
@Testpublic void test2()throws Exception{ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession openSession = sqlSessionFactory.openSession(); SqlSession openSession1 = sqlSessionFactory.openSession(); EmployMapper mapper = openSession.getMapper(EmployMapper.class); EmployMapper mapper1 = openSession1.getMapper(EmployMapper.class); Employee id = mapper.getId(3); System.out.println(id); openSession.close(); Employee id1 = mapper1.getId(3); System.out.println(id1); openSession1.close();}
留神要敞开再获取第二个,不然不会开启二级缓存,因为只有会话敞开的时候一级缓存才会转为二级缓存
2.2 二级缓存的属性
cacheEnabled=“true”
开启二级缓存
cacheEnabled=“false”
敞开二级缓存,然而一级缓存没有敞开
![上传中...]()
useCache=“false”
则二级缓存不能够应用,然而一级缓存还能够应用
flushCache="true"的话一级和二级缓存都会革除
默认为false
3.缓存原理图
缓存查问程序:
二级缓存
一级缓存
数据库
好啦,明天的文章就到这里,心愿能帮忙到屏幕前迷茫的你们!