1.一级缓存
1.概念
一级缓存是MyBatis中的默认缓存机制,也称为本地缓存。它是指SqlSession级别的缓存,即同一个SqlSession中多次执行相同的查询语句,第一次执行时会将查询结果缓存下来,当第二次执行相同的查询语句时,直接从缓存中取出数据,而不会再次去数据库中查询。一级缓存的生命周期与SqlSession保持一致,当SqlSession关闭时,一级缓存也随之不存在
我们先创建一个工具类
package com.guigu.util; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class SqlSessionUtil { // 封装直接拿到SqlSession public static SqlSession getSqlSession(){ InputStream resourceAsStream = null; try { resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml"); return new SqlSessionFactoryBuilder().build(resourceAsStream).openSession(true); } catch (IOException e) { e.printStackTrace(); return null; } } }
我们以后哪拿sqlSeesion就从这个工具类里面拿
利用一级缓存使用相同的sqlSession执行相同的sql的语句第二的sql语句应该是不执行的直接从缓存里面取。
@Test public void test07(){ SqlSession sqlSession = SqlSessionUtil.getSqlSession(); EmpMapper mapper = sqlSession.getMapper(EmpMapper.class); System.out.println(mapper.selectEmpById(1)); System.out.println(mapper.selectEmpById(1)); }
看日志可以发现只执行过一个sql语句
注意
注意如果在两次出查询中执行了任意一次增删改都会将缓存清除,因为执行增删改之后 很有可能影响到了上次查询的数据,所以下一次的查询将会重新从数据库中获取。
手动清空缓存
1.直调用对应的api
sqlSession.clearCache();
2.也可以通过关闭sqlSession来清理缓存当然这样清理缓存并没有什么实际意义
sqlSession.close();
mybatis的缓存内容(下)https://developer.aliyun.com/article/1429069