Mybatis 的一级缓存是SqlSession级别的缓存,仅在一次会话中有效。
与二级缓存相比,一级缓存有以下特点:
- 与数据库连接的事务相关
- 自动管理,无需手动配置
- 只在一次会话中有效,SqlSession关闭后失效。
使用时:
- 多个Mapper操作会共享一级缓存.
- 对同一查询条件的查询,只会执行一次真实的数据库查询。
- 后续的相同查询,将会从缓存中获取。
一级缓存默认开启,具体表现为:
SqlSession session = factory.openSession();
try {
User user1 = session.selectOne("com.itzhimei.mapper.UserMapper.findUser", 1);
User user2 = session.selectOne("com.itzhimei.mapper.UserMapper.findUser", 1);
System.out.println(user1 == user2); // true
} finally {
session.close();
}
这里,user1 == user2 永远为true。
这是因为user2其实来自一级缓存,并没有二次查询数据库。
一级缓存的弊端:
- 只在一次会话中有效,SqlSession关闭后失效。
- 不同的SqlSession无法共享数据。