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);
}
查询结果:

浙公网安备 33010602011771号