美文网首页
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