Hello,明天给各位童鞋们分享 Mybaits 缓存,连忙拿出小本子记下来吧!
1. 一级缓存
本地缓存
与数据库同一次会话期间查问到的数据会放在本地缓存中
当前如果须要获取雷同的数据, 间接从缓存中拿
一级缓存是主动开启的。上面的 4 种办法是使得一级缓存生效的
1.sqlSession 不同
2.sqlSession 雷同, 查问条件不同
3.sqlSession 雷同, 查问期间执行了增删操作
4. 手动革除了一级缓存
1.1 一级缓存初体验
@Test
public 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 不同
@Test
public 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
@Test
public 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. 缓存原理图
缓存查问程序:
二级缓存
一级缓存
数据库
好啦,明天的文章就到这里,心愿能帮忙到屏幕前迷茫的你们!