Spring JPA之实体属性类型转换器AttributeConverter

6 篇文章 0 订阅
2 篇文章 0 订阅

开发过程中我们可能会遇到这样的问题。如何将一个Map<String,String>(一个Object)保存到数据库中,很多人的第一想法是这个简单。只要我们持久化的时候将这个Map转换成一个JSON以String的形式保存即可。

今天我们换一个新的方式去实现这个功能:
首先我们要了解一个东西AttributeConverters属性转换器

第一步:实现一个AttributeConverters<X,Y>

X - 实体属性的类型
Y - 数据库列的类型

重写AttributeConverter的两个方法
convertToDatabaseColumn(X attribute)
将存储在entity属性中的值转换为要存储在数据库中的数据表示形式的值。
convertToEntityAttribute(Y dbData)
将存储在数据库列中的数据转换为要存储在entity属性中的值。

@Converter
public class MapConverter implements AttributeConverter<Map, String> {
    @Override
    public String convertToDatabaseColumn(Map map) {
        if (map == null) {
            return "";
        }
        return JSONObject.toJSONString(map);
    }

    @Override
    public Map convertToEntityAttribute(String s) {
        if (s != null && !s.equals("")) {
            return JSONObject.parseObject(s, Map.class);
        }
        return new HashMap();

    }
}

第二部:entity实体

@Entity
@Data
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;

    @Lob
    @Convert(converter = MapConverter.class)
    private Map<String,String> maps;
}

保存到数据库中数据如下:
数据库中数据

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值