首先大家可以看这片文章去搭建一个最基础的SpringBoot整合Mybatis的项目:
Mybatis - 预编译的运用和原理
首先再来给大家回顾下我的Mapper配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--关联UserMapper接口 ,下面的id要和接口中对应的方法名称一致,实现一对一的对应-->
<mapper namespace="com.application.mapper.UserMapper">
<select id="getUserById" parameterType="String" resultType="user">
select * from user where userName=#{userName}
</select>
</mapper>
如果想开启二级缓存,需要两个步骤:
1.application.yml文件增加配置:
mybatis:
# 之前的配置
type-aliases-package: com.application.bean
# 开启二级缓存
configuration:
cache-enabled: true
2.Mapper配置文件里面新增一个标签:,如图:

3.测试,我们调用一次接口,可以发现控制台输出:

明显的异常:
java.io.NotSerializableException: com.application.bean.User
为什么开启二级缓存就会报错呢?
cache中的readOnly默认为false,而可读写的缓存会通过序列化返回缓存对象的拷贝。Serializable接口。cache标签中配置readOnly=true。首先,从异常看出来,Mybatis在执行SQL的时候,肯定是尝试去序列化我们的User实体类对象。再看看我们的User类确实没有实现Serializable接口:

解决方式有两种:

Mapper配置文件中的cache标签,设置readOnly属性:
更改完后我们再来测试,我们调用一次接口,可以发现控制台输出:

此时我们进行接口的第二次调用,看看是否会用到缓存。

到这里二级缓存就开启成功了。