目录

  • 前言
  • 具体实现
    • 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> {@Autowiredprivate ObjectMapper mapper;/*** 转换成数据库字段* @param stringObjectMap* @return*/@Overridepublic 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> {@Autowiredprivate ObjectMapper mapper;@Overridepublic 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属性映射转换器相关推荐

  1. JPA 2.1类型转换器–保留枚举的更好方法

    可以使用JPA 2.0保留枚举,但是没有很好的方法来实现. 使用@Enumerated批注,可以使用EnumType.ORDINAL或EnumType.STRING将枚举值映射到其数据库表示形式. 但 ...

  2. java mapping_05.Java属性映射的正确姿势

    1. 前言 前一节讲到项目为了更容易维护,易于拓展等原因会使用各种分层领域模型.在多层应用中,常需要对各种不同的分层对象进行转换,这就会存在一个非常棘手的问题即:编写不同的模型之间相互转换的代码非常麻 ...

  3. jpa映射json_如何使用JPA和Hibernate映射JSON集合

    jpa映射json 介绍 开源的hibernate-types项目允许您将Java对象或Jackson JsonNode为JPA实体属性. 最近,由于我们的杰出贡献者,我们添加了对类型安全集合的支持, ...

  4. JPA教程:映射实体–第1部分

    在本文中,我将讨论JPA中的实体映射过程. 至于我的示例,我将使用与 我以前的一篇文章中使用的模式相同的模式 . 在前两篇文章中,我解释了如何在Java SE环境中设置JPA. 我不打算为Web应用程 ...

  5. Touch 方法amp;属性 映射工具

    Touch 方法&属性 映射工具(0.5 版本) 标签 : github 线上后门与接口调试: 原先需要测试一个接口(如Dubbo.DAO), 或为线上留后门, 需要写大量的Web层(Api. ...

  6. 如何使用JPA和Hibernate映射JSON集合

    介绍 开源的hibernate-types项目允许您将Java对象或Jackson JsonNode为JPA实体属性. 最近,感谢我们的杰出贡献者,我们添加了对类型安全集合的支持,该集合也可以作为JS ...

  7. Touch 方法属性 映射工具

    Touch 方法&属性 映射工具(0.5 版本) 标签 : github 线上后门与接口调试: 原先需要测试一个接口(如Dubbo.DAO), 或为线上留后门, 需要写大量的Web层(Api. ...

  8. 如何把模型内的参数与intralink8.0里的属性映射起来

    我的模型属性,比如cname,mat等,如何与intralink8.0下建的对应属性映射起来, 我的类型管理器下,那个属性栏下的添加属性都是灰色 见图: 注意在属性根那边可以先建立个对象属性,然后把c ...

  9. postgresql_如何使用Hibernate将PostgreSQL枚举映射到JPA实体属性

    postgresql 介绍 开源的hibernate-types项目允许您映射JSON,ARRAY, YearMonth , Month或特定于数据库的列(例如INET地址). 在本文中,我们将看到使 ...

最新文章

  1. PCL:点云配准1、基础知识:平面3自由度、旋转矩阵精讲
  2. 面向对象中类和类的关系
  3. python基础代码事例-Python基础总结成千行代码,让Python入门更简单!
  4. 解决git下载出现:Failed to connect to 127.0.0.1 port 1080: Connection refused拒绝连接错误
  5. JqueryMobile- 搭建主模板
  6. 时序图 分支_BOOM微架构学习(1)——取指单元与分支预测
  7. SAP Spartacus navigation ui节点的url字段的生成逻辑,同样来自sampledataaddon
  8. python 创建子类_python创建子类的方法分析
  9. echarts 4.0.4怎么下载_怎么让ECharts的提示框tooltip自动轮播?
  10. JAVA构架之并发编程的一些总结
  11. 细数人们对安卓的误解
  12. php model controller,Laravel 中 Controller访问Model函数/常量
  13. Gson反序列化详解
  14. [地图SkyLine二次开发]框架(2)
  15. 25个很酷的jQuery倒计时脚本–添加动态计数器!
  16. CFSSL: 证书管理工具:6:理解证书文件内容
  17. 应用泛函分析—线性空间
  18. Kotlin里的takeIf和takeUnless
  19. 洪灾面前,能抗衡的很少,但能做的很少
  20. 关于语言发育迟缓的孩子

热门文章

  1. 【MM小贴士】母子工单物料主数据设置及工单核算
  2. IntelliJ IDEA中ajax开发实现分页查询
  3. VS的release版本如何调试
  4. 通过注册表获取电脑硬件信息
  5. python爬虫小项目--飞常准航班信息爬取variflight(上)
  6. JavaFX11入门
  7. 互联网新时代拓客方法,你知道几个?
  8. 发放普通红包 php,发放普通红包
  9. [已解决]Keil 中出现No Browse Information available in ‘工程文件‘的
  10. 计算机换用户无法启动软件,Win7应用程序无法正常启动怎么解决?