作用:

数据存储的时候自动序列化字段上的复杂数据类型为字符串(类json格式),数据读取的时候自动反序列化回来,无需额外编写转化的Handler(MP官方的方案,需要手动为每一个复杂数据类型指定一个BaseTypeHandler)。

局限:

该方案实际是借鉴了Redisson的一种数据序列化方案,将数据本身的特征(类全名称)在序列化的时候,一并记录下来,用于反序列的依据,所以序列化之后的字符串并不是一个标准的json。这种方案的缺点很明显,就是类的全名称(包名+类名)不能随意更改,因为一旦更改,会导致找不到class的问题,进而无法正常的反序列化已经存在的数据。

示例:

@Serializable + @TableName(autoResultMap = true) 两个注解,其中@Serializable是对@TableField的包装,指定了typeHandler为CustomJacksonTypeHandler

  1. @Data
  2. @TableName(autoResultMap = true) // 必须
  3. @Table(comment = "用户")
  4. public class Users {
  5. @ColumnComment("ID")
  6. private Long id;
  7. @Serializable // 必须
  8. @ColumnComment("爱好")
  9. private List<Like> likes;
  10. }
  11. @Data
  12. class Like {
  13. private String id;
  14. private String name;
  15. }