一级缓存即本地缓存,底层就是一个 Map<Object, Object> cache = new HashMap(); 封装在 PerpetualCache 中
1、DefaultSqlSession #selectList
2、BaseExecutor #query #createCacheKey - key = {statementId,rowBounds,boundSql,paramObject}
3、从缓存中去查找,找到返回,未找到查数据库,之后放入缓存
备注:清除一级缓存方式
➀ 调用 insert、update、delete 方法
➁ 调用 session.clearCache();
➂ mapper 映射文件中对应的sql语句配置:flushCache="true"
代码示例:
public class TestCacheUtil {
private UserMapper userMapper;
private SqlSession session;
@Before
public void before() throws IOException {
String path = "SqlConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(path);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
session = sqlSessionFactory.openSession();
}
@Test
public void test(){
userMapper = session.getMapper(UserMapper.class);
UserInfo user1 = userMapper.findUserInfo();
// 清除一级缓存方法
session.clearCache();
UserInfo user2 = userMapper.findUserInfo();
System.out.println(user1 == user2);
}
}
本文介绍MyBatis框架中的一级缓存实现原理,包括其底层结构、使用方式及如何清除缓存。通过具体代码示例展示了如何在实际应用中操作一级缓存。
4542

被折叠的 条评论
为什么被折叠?



