首先大家可以看这片文章去搭建一个最基础的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
属性:更改完后我们再来测试,我们调用一次接口,可以发现控制台输出:
此时我们进行接口的第二次调用,看看是否会用到缓存。
到这里二级缓存就开启成功了。