legongju.com
我们一直在努力
2025-01-01 20:36 | 星期三

持久层框架mybatis的缓存机制如何配置

MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects, 普通的 Java 对象)映射成数据库中的记录。

MyBatis 提供了一级缓存和二级缓存的功能,以提高查询性能。

一级缓存(SqlSession 级别的缓存)

一级缓存是 MyBatis 内置的,它的默认行为是开启的。当在同一个 SqlSession 中执行相同的查询语句时,MyBatis 会首先在一级缓存中查找结果,如果找到则直接返回,否则才会去数据库查询。一级缓存的过期时间是默认开启的,它会在 SqlSession 执行 commit 或者 close 操作时失效。需要注意的是,对于绑定参数不同的查询语句,即使查询的结果是一样的,也不能共享一级缓存。

二级缓存(Mapper 级别的缓存)

二级缓存是可选的,需要手动开启。它是在 Mapper 级别进行的缓存,可以跨多个 SqlSession 共享。当开启二级缓存后,对于相同的查询语句和参数,MyBatis 会首先在一级缓存中查找结果,如果没有找到,则会去二级缓存中查找,如果还没有找到,才会去数据库查询。二级缓存可以显著提高查询性能,特别是在高并发的场景下。需要注意的是,对于绑定参数不同的查询语句,即使查询的结果是一样的,也不能共享二级缓存。另外,二级缓存的生命周期是和 Mapper 对象绑定的,当 Mapper 对象被销毁时,二级缓存也会被销毁。

配置二级缓存

要在 MyBatis 中配置二级缓存,需要在 Mapper XML 文件中使用 标签进行开启和配置。例如:




上述配置表示,对于 selectUserById 这个查询语句,开启二级缓存。需要注意的是, 标签只能用于