mybatisPlus为什么生成PO时会建议或者在模板加上Serializable?

mybatisPlus在生成PO类时建议实现Serializable接口,原因在于二级缓存的使用。当对象被序列化并存储在缓存中时,可以保证数据的一致性。一级缓存基于session,而二级缓存基于namespace,因此二级缓存需要序列化以进行跨session的数据共享,防止数据冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mybatisPlus为什么生成PO时会建议或者在模板加上Serializable?

今天在解答同事的问题时候问我这个public class WarnBondInfo implements Serializable 为什么要加Serializable 的时候我就说下了为了序列化和反序列化,但是哪个时候并不知道这个Serializable 在mybatis中的作用,也不知道为什么到加。


就在下午闲暇之余我再回顾了下mybatis的源码,发现
在这里插入图片描述
在开启二级缓存put到缓存的时候委派到SerializedCache的putObject判断了否是Serializable类型并且将其强转换。
在这里插入图片描述
强转为将byte数组存入二级缓存中。
再从二级缓存get的时候将其反序化。
在这里插入图片描述
而在我们默认开启的一级缓存中是直接将对象put到PerpetualCache(二级缓存也是委派到这里)
在这里插入图片描述
由此就引发思考,为什么二级缓存需要将对象进行序列化而一级缓存不需要?
查阅资料和自己总结:
在一级缓存中是基于session的而二级缓存是基于nameSpace,二级缓存得到的对象每次都是新的对象(深拷贝)而一级缓存每次get到的都是同一个对象,在二级缓存中可以对对象进行修改,并且序列化为byte数组可较少空间。

以上是本人的拙见。有误欢迎指出。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值