Mybatis缓存
缓存就是内存中的一个对象,用于对数据库查询结果的保存,用于减少与数据库的交互次数从而降低数据库的压力,进而提高响应速度。相当于在数据库与应用之间加了一个中间件。
Mybatis缓存就是当Mybatis中进行一次SQL查询或更新后,并不会直接消失,而是被保存起来,下一次执行时不创建而是直接从缓存中提取。Mybatis分为一级缓存与二级缓存。
- 一级缓存,也叫本地缓存。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();
}
-
二级缓存,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();
}


浙公网安备 33010602011771号