MyBatis二级缓存

懵懂的女人 提交于 2020-03-02 10:13:55

一 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();
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!