作用:
数据存储的时候自动序列化字段上的复杂数据类型为字符串(类json格式),数据读取的时候自动反序列化回来,无需额外编写转化的Handler(MP官方的方案,需要手动为每一个复杂数据类型指定一个BaseTypeHandler)。
局限:
该方案实际是借鉴了Redisson的一种数据序列化方案,将数据本身的特征(类全名称)在序列化的时候,一并记录下来,用于反序列的依据,所以序列化之后的字符串并不是一个标准的json。这种方案的缺点很明显,就是类的全名称(包名+类名)不能随意更改,因为一旦更改,会导致找不到class的问题,进而无法正常的反序列化已经存在的数据。
示例:
@Serializable + @TableName(autoResultMap = true) 两个注解,其中@Serializable是对@TableField的包装,指定了typeHandler为CustomJacksonTypeHandler
@Data
@TableName(autoResultMap = true) // 必须
@Table(comment = "用户")
public class Users {
@ColumnComment("ID")
private Long id;
@Serializable // 必须
@ColumnComment("爱好")
private List<Like> likes;
}
@Data
class Like {
private String id;
private String name;
}