通过 @Convert
注解指定自定义转换器,可用于实体属性类型与数据库字段类型之间的相互转换,便于将数据存储至数据库或从数据库读取数据。
@Repeatable(Converts.class)
@Target({METHOD, FIELD, TYPE})
@Retention(RUNTIME)
public @interface Convert {
Class converter() default void.class;
String attributeName() default "";
boolean disableConversion() default false;
自定义转换器
- 添加
@Converter
注解,标识为转换器 - 实现
AttributeConverter<X, Y>
接口,X 为实体属性类型,Y 为数据库字段类型 - 重写
convertToDatabaseColumn()
和convertToEntityAttribute()
方法
举例:
原本的类型与数据库字段的类型正向反向转换
实体类
@Converter
public class RuleConverter implements AttributeConverter<CouponTemplateRule, String> {
@Override
public String convertToDatabaseColumn(TemplateRule rule) {
return JSON.toJSONString(rule);
}
@Override
public TemplateRule convertToEntityAttribute(String rule) {
return JSON.parseObject(rule, TemplateRule.class);
}
}
枚举类
@Converter
public class ProductLineConverter implements AttributeConverter<ProductLine, Integer> {
@Override
public Integer convertToDatabaseColumn(ProductLine productLine) {
return productLine.getCode();
}
@Override
public ProductLine convertToEntityAttribute(Integer code) {
return ProductLine.of(code);
}
}