mybatis中一级缓存key
时间: 2023-04-04 10:02:47 浏览: 61
Mybatis中一级缓存的key是由SQL语句、参数和Mapper的命名空间组成的。具体来说,Mybatis会将SQL语句、参数和Mapper的命名空间组合成一个CacheKey对象,作为一级缓存的key。当下次执行相同的SQL语句并且参数相同,Mybatis会先从一级缓存中查找是否存在相同的CacheKey对象,如果存在则直接返回缓存中的结果,否则执行SQL语句并将结果存入一级缓存中。
相关问题
mybatis获取一级缓存
在 MyBatis 中,一级缓存是默认开启的,它是基于 Per-Request 的,也就是说,每个请求(SqlSession)都会拥有自己的缓存。在同一个 SqlSession 中,如果连续执行多次相同的查询语句,那么第一次查询的结果会被缓存,后面的查询会直接从缓存中获取,而不是重新执行 SQL 语句。
要获取一级缓存,只需要在执行 SQL 后,通过 `SqlSession` 的 `getCache()` 方法获取其对应的 `Cache` 对象,然后再通过 `Cache` 对象的 `getObject(Object key)` 方法获取缓存中对应的结果。
例如,下面的代码演示了如何获取一级缓存中的结果:
```java
// 获取 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
// 执行查询语句
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.selectById(1L);
// 获取一级缓存
Cache cache = sqlSession.getCache(UserMapper.class);
// 从缓存中获取结果
User cachedUser = (User) cache.getObject("com.example.mapper.UserMapper.selectById:1");
// 检查结果是否相同
System.out.println(user == cachedUser); // true
} finally {
sqlSession.close();
}
```
在上面的代码中,我们先执行了一次查询语句,然后通过 `SqlSession` 的 `getCache()` 方法获取了对应的 `Cache` 对象,最后通过 `getObject(Object key)` 方法从缓存中获取了结果。需要注意的是,缓存中的 key 是由 MyBatis 自动构建的,格式为 `Mapper类名.方法名:参数值`,因此我们需要传入正确的 key 才能获取到缓存中的结果。
mybatis一级缓存
Mybatis 一级缓存是指在同一个 SqlSession 中执行相同的 SQL 查询语句时,Mybatis 会将第一次查询结果缓存到内存中,后续查询可以直接从缓存中获取结果,而不需要再次查询数据库。一级缓存是 Mybatis 默认开启的,它是在 SqlSession 中实现的。
Mybatis 一级缓存的实现方式是将查询结果放到一个 Map 中,Map 的 key 是查询语句的 SQL 语句和参数组成的字符串,value 是查询结果。每个 SqlSession 中都有一个 Map,用于存放该 SqlSession 中执行的所有查询结果。
虽然 Mybatis 一级缓存能够提高查询效率,但是也会存在缓存污染的问题。当更新、插入、删除操作对数据库进行了修改时,Mybatis 会自动清空该 SqlSession 中的一级缓存,以避免缓存污染的问题。如果需要在同一个 SqlSession 中执行多个查询语句并且需要缓存所有的结果,可以使用 Mybatis 的二级缓存。