美文网首页
Mybatis缓存

Mybatis缓存

作者: 小杨小杨神采飞杨 | 来源:发表于2020-04-17 18:37 被阅读0次

缓存对select语句生效,不经常修改,需要经常查询的数据可以使用缓存提升速度,反之则不建议使用,mybatis默认使用一级缓存,可设置二级或自定义二级缓存

一级缓存

默认开启,SqlSession级别,连接关闭后就清空缓存

结果
注意:当进行增删改操作之后,即使增删改的不是查询过的信息,依旧会重新缓存数据
结果
也可以主动清理缓存
sqlSession.clearCache(); //清除之前操作产生的缓存

二级缓存

需要设置,namespace级别,使用二级缓存若不设置只读,则需要让实体类可以序列化,即实现序列化接口


序列化接口

二级缓存在mapper.xml中开启就可以使用,但是还是建议在pom.xml中显式定义开启全局缓存,提高程序可读性

<!--显式开启全局缓存-->
<setting name="cacheEnabled" value="true"/>

在mapper.xml中使用标签<cache/>即可开启二级缓存,之后将需要使用二级缓存的sql标签的useCache属性设为true即可


useCache

二级缓存是在一级缓存关闭之后将数据传递给二级缓存,所以当创建一级缓存的sqlSession未关闭,则二级缓存中不会有对应的缓存数据

@Test
    public void testFind() {
        SqlSession sqlSession = mybatisUtil.getSqlSession();
        SqlSession sqlSession2 = mybatisUtil.getSqlSession();
        userMapper mapper = sqlSession.getMapper(userMapper.class);
        userMapper mapper2 = sqlSession2.getMapper(userMapper.class);

        user userById = mapper.findUserById(95001);
        System.out.println(userById);

        sqlSession.close(); //关闭第一次连接 == 关闭一级缓存
        //mapper.updateUser(new user(95002,"周杰伦","88888888"));
        //sqlSession.clearCache();

        System.out.println("==================================================================");

        user userById2 = mapper2.findUserById(95001);
        System.out.println(userById2);

        System.out.println(userById == userById2);

        sqlSession2.close();
    }
即通过

自定义缓存

可以自定义或引入第三方缓存,目前用redis较多

相关文章

网友评论

      本文标题:Mybatis缓存

      本文链接:https://www.haomeiwen.com/subject/dhdyvhtx.html