一 MyBatis二级缓存原理
mybatis中的二级缓存是mapper级别的缓存,它是按照不同mapper有不同的namespace来区分的。也就是说,如果两个mapper的namespace相同,即使是两个mapper,那么这两个mapper中执行sql查询到的数据也将存在相同的二级缓存区域中。
二 MyBatis二级缓存使用
1开启二级缓存
由于mybaits的二级缓存是mapper范围级别,所以除了在SqlMapConfig.xml设置二级缓存的总开关外,还要在具体的mapper.xml中开启二级缓存。设置如下:
[XML] 纯文本查看 复制代码
1
2
3
|
< settings > < setting name = "cacheEnabled" value = "true" /> </ settings > |
这是在SqlMapConfig.xml中设置的,还得在具体的mapper.xml中设置,如下:
[XML] 纯文本查看 复制代码
1
2
3
4
|
< mapper namespace = "com.itheima.dao.IUserDao" > <!--开启user支持二级缓存--> < cache /> </ mapper > |
2 将需要缓存的类实现Serializable接口
[Java] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
|
public class User implements Serializable { private Integer id; private String username; private String address; get和set方法省略 } |
3 测试mybatis的二级缓存
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
@Test public void testCache2() throws Exception { SqlSession sqlSession1 = sqlSessionFactory.openSession(); SqlSession sqlSession2 = sqlSessionFactory.openSession(); // 创建代理对象 UserMapper userMapper1 = sqlSession1.getMapper(UserMapper. class ); // 第一次发起请求,查询id为1的用户 从数据库中查询 User user1 = userMapper1.findUserById( 1 ); System.out.println(user1); sqlSession1.close(); // 创建代理对象 UserMapper userMapper2 = sqlSession2.getMapper(UserMapper. class ); // 第二次发起请求,查询id为1的用户 从二级缓存中查询 User user2 = userMapper2.findUserById( 1 ); System.out.println(user2); sqlSession2.close(); } |
来源:CSDN
作者:爱学习的小肥猪
链接:https://blog.csdn.net/heima201907/article/details/104551734