Mybatis中如何进⾏json序列化
前⾔
这部分内容原本只是在⼀个⼤的填坑记录中记录了⼏个⽚段。但是,到了今天,我觉得有必要单独拿出来说⼀下。为什么呢?第⼀,我觉得,这个解决⽅案短时间内,我⽆法再有⼤的进步了。第⼆,重点的问题基本都已经得到解决了。好吧,少聊天,多上⼲货。
fastjson怎么用mybatis plus的实现
在3.2.0之后的mybatis plus中,其实是提供了⼀个版本的json序列化的。它是提供了⼏个⼯具的版本:
FastjsonTypeHandler,GsonTypeHandler,JacksonTypeHandler。只要在对应属性的TableField指明TypeHandler,并在TableName上表名autoResultMap为true。⼀切就都ok了。但是吧,这⾥有两个问题:
1. 它序列化的字段是String,在AbstractJsonTypeHandler中直接指明了ps.setString(i, toJson(parameter)); 这意味着什么呢?意味着,你
只能使⽤varchar这样的存储字符串的数据类型进⾏存储。对于很多⼈来说,其实这也是⾜够的,其实它只是想把⼀个对象存在这⾥⽽不想再去开⼀个⼀对⼀的表进⾏维护。但是,随着json数据类型在关系型数据
库的不断普及,各数据库已经相继推出了json的数据类型。我⽤的PostgreSQL中,jsonb就是如此。我们可以直接⽤sql检索json中的字段,或者对其建⽴索引。所以,它提供的这个TypeHandler是不够的。
2. 这个问题,是后来才发现的。就是,它⾥⾯虽然使⽤type进⾏了序列化和反序列化。但是,你可以尝试使⽤List或者Map这样的带泛型的接
⼝。据我后来的测试,gson应该会直接失败,fastjson应该会反序列化成JSONObject,然后,我们在调⽤⾃⼰POJO的⽅法时就会报错。json字段类型的实现
关于这个问题,其实我给mybatis plus的社区提过issue。对⽅以jdbc不⽀持json类型,⽆法提供通⽤版本为由拒绝了。没办法了,估计这个框架⾥⼀时半会不会有了,就只能实现⾃⼰的了。先上代码吧,我的通⽤实现如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。