mybatisPlus为什么生成PO时会建议或者在模板加上Serializable?
今天在解答同事的问题时候问我这个public class WarnBondInfo implements Serializable 为什么要加Serializable 的时候我就说下了为了序列化和反序列化,但是哪个时候并不知道这个Serializable 在mybatis中的作用,也不知道为什么到加。
就在下午闲暇之余我再回顾了下mybatis的源码,发现
在开启二级缓存put到缓存的时候委派到SerializedCache的putObject判断了否是Serializable类型并且将其强转换。
强转为将byte数组存入二级缓存中。
再从二级缓存get的时候将其反序化。
而在我们默认开启的一级缓存中是直接将对象put到PerpetualCache(二级缓存也是委派到这里)
由此就引发思考,为什么二级缓存需要将对象进行序列化而一级缓存不需要?
查阅资料和自己总结:
在一级缓存中是基于session的而二级缓存是基于nameSpace,二级缓存得到的对象每次都是新的对象(深拷贝)而一级缓存每次get到的都是同一个对象,在二级缓存中可以对对象进行修改,并且序列化为byte数组可较少空间。
以上是本人的拙见。有误欢迎指出。