先看下官方文档导致这个问题的原因:
readOnly(只读)属性可以被设置为 true 或 false。只读的缓存会给所有调用者返回缓存对象的相同实例。 因此这些对象不能被修改。这就提供了可观的性能提升。而可读写的缓存会(通过序列化)返回缓存对象的拷贝。 速度上会慢一些,但是更安全,因此默认值是 false。
也就是说,默认情况下,出于安全考虑,Mybatis将缓存设置成可读写的,然后通过序列化的方式返回给我们缓存的对象拷贝。
如果我们的对象没有实现可序列化的接口就会抛出 org.apache.ibatis.cache.CacheException: Error serializing objec
的异常。所以我们的解决方式有两种:
第一种:让我们的实体类实现 Serializable
接口即可。
public class Student implements Serializable {