JPA - @Convert属性映射转换器

2021/8/17 6:07:13

本文主要是介绍JPA - @Convert属性映射转换器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • 前言
  • 具体实现
    • Map与JSON的属性转换器
    • List与JSON属性转换器
    • 实体应用
    • 效果图

前言

@Convert属性转换器用于数据库属性类型与java存储的类型做转换,其方便之处在于存储与读取的时候能自动转换,如下业务场景:
业务对象存在一个Map或List属性,存入数据库时需保存为json字符串,返回前端时以对象来返回。

@Convert属性转换器需实现AttributeConverter<X, Y>接口,第一个泛型类型为Entity字段类型,第二个泛型类型为数据库字段类型。

具体实现

Map与JSON的属性转换器

  • MapAndJson.java
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import javax.persistence.AttributeConverter;
import java.util.HashMap;
import java.util.Map;

/**
 * @Description Map与JSON映射转换器
 * @author coisini
 * @date Aug 16, 2021
 * @Version 1.0
 */
public class MapAndJson implements AttributeConverter<Map<String, Object>, String> {

    @Autowired
    private ObjectMapper mapper;

    /**
     * 转换成数据库字段
     * @param stringObjectMap
     * @return
     */
    @Override
    public String convertToDatabaseColumn(Map<String, Object> stringObjectMap) {
        try {
            return mapper.writeValueAsString(stringObjectMap);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }

    /**
     * 转换成实体字段
     * @param s
     * @return
     */
    @Override
    @SuppressWarnings("unchecked")
    public Map<String, Object> convertToEntityAttribute(String s) {
        try {
            return mapper.readValue(s, HashMap.class);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}

List与JSON属性转换器

  • ListAndJson.java
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import javax.persistence.AttributeConverter;
import java.util.List;

/**
 * @Description List与JSON 映射转换器
 * @author coisini
 * @date Aug 16, 2021
 * @Version 1.0
 */
public class ListAndJson implements AttributeConverter<List<Object>, String> {

    @Autowired
    private ObjectMapper mapper;

    @Override
    public String convertToDatabaseColumn(List<Object> objects) {
        try {
            return mapper.writeValueAsString(objects);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }

    @Override
    @SuppressWarnings("unchecked")
    public List<Object> convertToEntityAttribute(String s) {
        try {
            return mapper.readValue(s, List.class);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}

实体应用

@Convert(converter = MapAndJson.class)
private Map<String, Object> test;

@Convert(converter = ListAndJson.class)
private List<Object> specs;

效果图

  • 数据库

在这里插入图片描述

  • 前端返回数据

在这里插入图片描述


- End -
梦想是咸鱼
关注一下吧


这篇关于JPA - @Convert属性映射转换器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程