@Convert 设置自定义属性转换器 AttributeConverter

通过 @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;

自定义转换器

  1. 添加@Converter注解,标识为转换器
  2. 实现 AttributeConverter 接口,X 为实体属性类型,Y 为数据库字段类型
  3. 重写 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);
    }
}

你可能感兴趣的:(工具类)