06-Mybatis中的缓存机制

Posted on 2021-03-09 20:14  萌栈师  阅读(105)  评论(0)    收藏  举报

Mybatis的缓存机制

a) 缓存用于提高查询的效率.

b) MyBatis 的缓存是使用 SQL 标签的 ID 作为缓存的唯一标识的. 执行相同的标签 可以使用缓存. 不同的标签不能使用缓存.

c) MyBatis 中有两种缓存机制.

一、一级缓存:SqlSession(默认开启)

a) 默认开启. 线程级别的缓存, SqlSession 的缓存

b) 在一个 SqlSession 生命周期中有效. SqlSession 关闭,缓存清空.

@Test
public void selUser(){
    Users u = new Users();
    u.setUsername("小丽");
    List<Users> users = mapper.selUser(u);
    System.out.println(users);
    System.out.println("-----使用默认sqlsession缓存---------");
    users = mapper.selUser(u);
    System.out.println(users);
    sqlSession.close();
}

查询结果:

二、二级缓存-SqlSessionFactory(默认关闭)

a) 进程级别的缓存, SqlSessionFactory 的缓存

b) 在一个 SqlSessionFactory 生命周期中有效. 可以在多个 SqlSession 生命周期中共享.

c) 默认关闭, 需要使用的时候, 要为某个命名空间开启二级缓存(在 mapper.xml 中配置<cache>).

  • 1.在applicationContext-dao.xml配置文件 添加<setting></setting>标签,按照Mybatis配置文件的dtd约束文件规定的顺序放置:
 <settings>
     <!--开启Mybatis的二级缓存-->
     <setting name="cacheEnabled" value="true"/>
</settings>
  • 2.在含有sql语句的映射文件mapper.xml中第一行加<cache></cache>

  • 运行代码:
@Test
public void selUser(){
    Users u = new Users();
    u.setUsername("小丽");
    List<Users> users = mapper.selUser(u);
    System.out.println(users);
    sqlSession.close();//关闭当前SqlSession对象,一级缓存清空
    System.out.println("-----使用SqlSessionFactory二级缓存---------");
    //使用SqlSessionFactory对象重新建一个SqlSession执行器对象
    SqlSession sqlSession2 = sessionFactory.openSession();
    UserMapper mapper2 = sqlSession2.getMapper(UserMapper.class);
    users = mapper2.selUser(u);
    System.out.println(users);
}

查询结果:

注:开启二级缓存可以提高查询效率,后面可以都把打开

另:微服务分布式系统中,用redis做缓存使用

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3