Mybatis 缓存机制
Mybatis 提供了一级、二级缓存。
- 一级缓存:线程级别的缓存,也称为
本地缓存
或sqlSession级别的缓存
,一级缓存是默认存在的,同一个会话中,查询两次相同的操作就会从缓存中取。 - 二级缓存:
全局范围的缓存
;除了当前sqlSession
能用外,其他的也可以使用。二级缓存默认也是开启的,只需要在 mapper 文件中写一个 即可实现,二级缓存的实现需要 pojo 实现序列化的接口,否则会出错
搭建工程
快速搭建一个项目,以便更加深入的了解原理。
- 创建一个普通 maven 项目即可。(就不做演示了)
- 依赖中的 mysql 版本换成你们数据库对应的版本,我的是 8.0
<dependencies> <!--mybatis坐标--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!--mysql驱动坐标--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.25</version> <scope>runtime</scope> </dependency> <!--单元测试坐标--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.7</version> </dependency> <!-- Mybatis整合redis做缓存 --> <dependency> <groupId>org.mybatis.caches</groupId> <artifactId>mybatis-redis</artifactId> <version>1.0.0-beta2</version> </dependency> <!-- 分页助手 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>3.7.5</version> </dependency> <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> <version>0.9.1</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>3.1.2</version> </dependency> </dependencies>
实体类
@Table(name = "user") public class User implements Serializable { @Id //对应的是注解id @GeneratedValue(strategy = GenerationType.IDENTITY) //设置主键的生成策略 private Integer id; private String username; // get set 省略 }
mapper
public interface IUserMapper { //更新用户 @Update("update user set username = #{username} where id = #{id}") public void updateUser(User user); //根据id查询用户 @Options(useCache = true) @Select({"select * from user where id = #{id}"}) public User findUserById(Integer id); }
配置文件sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd