在 Java + MyBatis 中,缓存主要分为 一级缓存 和 二级缓存,合理使用可以显著提升性能。下面系统地给你讲一下。
SqlSessionSqlSession session = sqlSessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User u1 = mapper.selectById(1); // 查数据库
User u2 = mapper.selectById(1); // 走一级缓存
sqlSession.clearCache()INSERT / UPDATE / DELETESqlSessionMapper(Namespace)SqlSession 可共享<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
<mapper namespace="com.example.mapper.UserMapper">
<cache/>
</mapper>
或使用注解:
@CacheNamespace
public interface UserMapper {
}
SqlSession s1 = factory.openSession();
UserMapper m1 = s1.getMapper(UserMapper.class);
m1.selectById(1); // 查库
s1.close();
SqlSession s2 = factory.openSession();
UserMapper m2 = s2.getMapper(UserMapper.class);
m2.selectById(1); // 走二级缓存
public class User implements Serializable {}
update/delete/insert 会清空缓存MyBatis 支持自定义 Cache 实现。
<cache type="com.example.RedisCache"/>
public class RedisCache implements Cache {
// 实现 get / put / clear 等方法
}
如果你用的是 Spring Boot,更推荐:
@Service
public class UserService {
@Cacheable("user")
public User getUser(Integer id) {
return userMapper.selectById(id);
}
}
spring:
cache:
type: redis
| 缓存类型 | 范围 | 默认 | 是否共享 |
|---|---|---|---|
| 一级缓存 | SqlSession | 是 | 否 |
| 二级缓存 | Mapper | 否 | 是 |
| Spring Cache | 方法级 | 否 | 可配置 |
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。