Mybatis缓存

​ 缓存就是内存中的一个对象,用于对数据库查询结果的保存,用于减少与数据库的交互次数从而降低数据库的压力,进而提高响应速度。相当于在数据库与应用之间加了一个中间件。

​ Mybatis缓存就是当Mybatis中进行一次SQL查询或更新后,并不会直接消失,而是被保存起来,下一次执行时不创建而是直接从缓存中提取。Mybatis分为一级缓存与二级缓存。

  1. 一级缓存,也叫本地缓存。SqlSession级别缓存。默认开启。

​ 每个SqlSession中有一个HashMap数据缓存区用于存储已执行的SQL语句。

  • 开启日志。
    @Test
    public void test1(){
        MybatisSqlSession mybatisSqlSession = new MybatisSqlSession();
        SqlSession sqlSession = mybatisSqlSession.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList01 = mapper.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }
        System.out.println("下一次查询");
        List<User> userList02 = mapper.getUserList();
        for (User user : userList02) {
            System.out.println(user);
        }
        sqlSession.close();
    }
  • image
  1. 二级缓存,namespace级别缓存。需要手动开启。

    为提高可扩展性,Mybatis提供了Cache接口。可以通过Cache接口实现自定义二级缓存。

    步骤:在 SQL 映射文件中添加一行:

    <cache/>
    
    <!--    开启二级缓存-->
        <cache
                eviction="FIFO"
                flushInterval="60000"
                size="512"
                readOnly="true"/>
    <!--然后将useCache设置为true ,默认开启 ,添加增加代码可读性-->
        <select id="getUserList" resultType="user" useCache="true">
            select * from jdbc.userlist;
        </select>
    
    @Test
    public void test1(){
        MybatisSqlSession mybatisSqlSession = new MybatisSqlSession();
        SqlSession sqlSession01 = mybatisSqlSession.getSqlSession();
        SqlSession sqlSession02 = mybatisSqlSession.getSqlSession();
        UserMapper mapper1 = sqlSession01.getMapper(UserMapper.class);
        List<User> userList = mapper1.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession01.close();
        UserMapper mapper2 = sqlSession02.getMapper(UserMapper.class);
        System.out.println("下一次查询");
        List<User> userList02 = mapper2.getUserList();
        for (User user : userList02) {
            System.out.println(user);
        }
        sqlSession02.close();
    }

image

posted on 2021-09-21 15:46  需要多勇敢  阅读(76)  评论(0)    收藏  举报