Mybatis中的缓存机制

x33g5p2x  于11个月前 转载在 其他  
字(1.1k)|赞(0)|评价(0)|浏览(105)

有效降低用户访问物理设备的频次,提高用户响应速度
分类

1.MyBatis自身缓存:一级缓存、二级缓存

2.Redis缓存  读取10万次 /s  写8.6万次/s

一级缓存

默认开启一级缓存,可以在同一个sqlsession对象中查询相同的数据,实现数据共享

测试代码

/*一级缓存测试1*/
    @Test
    public void test5(){
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
        Dept dept= new Dept();
        List<Dept> list=mapper.findAll(dept);
        List<Dept> list2=mapper.findAll(dept);
        System.out.println(list==list2);//返回true
        sqlSession.close();
    }
/*一级缓存测试2*/
    @Test
    public void test6(){
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
        Dept dept= new Dept();
        List<Dept> list=mapper.findAll(dept);
        SqlSession sqlSession2 = sqlSessionFactory.openSession(true);
        DeptMapper mapper2 = sqlSession2.getMapper(DeptMapper.class);
        Dept dept2= new Dept();
        List<Dept> list2=mapper2.findAll(dept);
        System.out.println(list==list2);//返回false
        sqlSession.close();
    }

综上所述,MyBatis中的一级缓存是默认开启的,且只在一个sqlSession中生效

二级缓存

也是默认开启的,但是需要手动标识,可以在同一个sqlSessionFactory内部有效,是全部配置

二级缓存标识

在对应的映射文件中添加**<cache/>**标签

错误示范

原因:sqlSession查询数据之后,业务逻辑执行成功,并且关闭之后,一级缓存才能将数据交给二级缓存保管,所以此处需要先关闭sqlSession

相关文章