在 MyBatis-Plus 中, AbstractJsonTypeHandler 是一个用于处理 JSON 数据类型的抽象类。
一、作用
1. 数据库与 Java 对象之间的 JSON 数据转换
- 当数据库中的字段类型为可以存储 JSON 格式数据的类型(如 MySQL 的 JSON 类型、Oracle 的 CLOB 等可存储较长文本的类型被用于存储 JSON 数据时), AbstractJsonTypeHandler 可以将 Java 对象中的复杂数据结构(如包含嵌套对象的列表等)序列化为 JSON 字符串存储到数据库中。
- 在从数据库读取数据时,它又可以将存储在数据库中的 JSON 字符串反序列化为 Java 对象,方便在应用程序中进行操作。
二、使用方法
1. 自定义类型处理器
- 继承 AbstractJsonTypeHandler 创建一个自定义的类型处理器类,实现其中的抽象方法来完成具体的 JSON 序列化和反序列化逻辑。例如:
java
import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.handlers.AbstractJsonTypeHandler; import java.util.List;
public class CustomJsonTypeHandler extends AbstractJsonTypeHandler<List> {
@Override
protected List<String> parse(String json) {return JSON.parseArray(json, String.class);
}@Override
protected String toJson(List<String> obj) {return JSON.toJSONString(obj);
}
} 2. 在实体类中应用
- 在实体类中,使用 @TableField 注解指定使用自定义的类型处理器来处理特定的字段。例如:
java
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import java.util.List;
@TableName("your_table_name") public class YourEntity { // 其他字段...
@TableField(typeHandler = CustomJsonTypeHandler.class)
private List<String> jsonDataField;// getter 和 setter 方法...
}
这样,在对包含 jsonDataField 字段的实体进行数据库操作时,MyBatis-Plus 就会自动使用自定义的 CustomJsonTypeHandler 来处理该字段的 JSON 数据转换。