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> {@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属性映射转换器相关推荐
- JPA 2.1类型转换器–保留枚举的更好方法
可以使用JPA 2.0保留枚举,但是没有很好的方法来实现. 使用@Enumerated批注,可以使用EnumType.ORDINAL或EnumType.STRING将枚举值映射到其数据库表示形式. 但 ...
- java mapping_05.Java属性映射的正确姿势
1. 前言 前一节讲到项目为了更容易维护,易于拓展等原因会使用各种分层领域模型.在多层应用中,常需要对各种不同的分层对象进行转换,这就会存在一个非常棘手的问题即:编写不同的模型之间相互转换的代码非常麻 ...
- jpa映射json_如何使用JPA和Hibernate映射JSON集合
jpa映射json 介绍 开源的hibernate-types项目允许您将Java对象或Jackson JsonNode为JPA实体属性. 最近,由于我们的杰出贡献者,我们添加了对类型安全集合的支持, ...
- JPA教程:映射实体–第1部分
在本文中,我将讨论JPA中的实体映射过程. 至于我的示例,我将使用与 我以前的一篇文章中使用的模式相同的模式 . 在前两篇文章中,我解释了如何在Java SE环境中设置JPA. 我不打算为Web应用程 ...
- Touch 方法amp;属性 映射工具
Touch 方法&属性 映射工具(0.5 版本) 标签 : github 线上后门与接口调试: 原先需要测试一个接口(如Dubbo.DAO), 或为线上留后门, 需要写大量的Web层(Api. ...
- 如何使用JPA和Hibernate映射JSON集合
介绍 开源的hibernate-types项目允许您将Java对象或Jackson JsonNode为JPA实体属性. 最近,感谢我们的杰出贡献者,我们添加了对类型安全集合的支持,该集合也可以作为JS ...
- Touch 方法属性 映射工具
Touch 方法&属性 映射工具(0.5 版本) 标签 : github 线上后门与接口调试: 原先需要测试一个接口(如Dubbo.DAO), 或为线上留后门, 需要写大量的Web层(Api. ...
- 如何把模型内的参数与intralink8.0里的属性映射起来
我的模型属性,比如cname,mat等,如何与intralink8.0下建的对应属性映射起来, 我的类型管理器下,那个属性栏下的添加属性都是灰色 见图: 注意在属性根那边可以先建立个对象属性,然后把c ...
- postgresql_如何使用Hibernate将PostgreSQL枚举映射到JPA实体属性
postgresql 介绍 开源的hibernate-types项目允许您映射JSON,ARRAY, YearMonth , Month或特定于数据库的列(例如INET地址). 在本文中,我们将看到使 ...
最新文章
- PCL:点云配准1、基础知识:平面3自由度、旋转矩阵精讲
- 面向对象中类和类的关系
- python基础代码事例-Python基础总结成千行代码,让Python入门更简单!
- 解决git下载出现:Failed to connect to 127.0.0.1 port 1080: Connection refused拒绝连接错误
- JqueryMobile- 搭建主模板
- 时序图 分支_BOOM微架构学习(1)——取指单元与分支预测
- SAP Spartacus navigation ui节点的url字段的生成逻辑,同样来自sampledataaddon
- python 创建子类_python创建子类的方法分析
- echarts 4.0.4怎么下载_怎么让ECharts的提示框tooltip自动轮播?
- JAVA构架之并发编程的一些总结
- 细数人们对安卓的误解
- php model controller,Laravel 中 Controller访问Model函数/常量
- Gson反序列化详解
- [地图SkyLine二次开发]框架(2)
- 25个很酷的jQuery倒计时脚本–添加动态计数器!
- CFSSL: 证书管理工具:6:理解证书文件内容
- 应用泛函分析—线性空间
- Kotlin里的takeIf和takeUnless
- 洪灾面前,能抗衡的很少,但能做的很少
- 关于语言发育迟缓的孩子
热门文章
- 【MM小贴士】母子工单物料主数据设置及工单核算
- IntelliJ IDEA中ajax开发实现分页查询
- VS的release版本如何调试
- 通过注册表获取电脑硬件信息
- python爬虫小项目--飞常准航班信息爬取variflight(上)
- JavaFX11入门
- 互联网新时代拓客方法,你知道几个?
- 发放普通红包 php,发放普通红包
- [已解决]Keil 中出现No Browse Information available in ‘工程文件‘的
- 计算机换用户无法启动软件,Win7应用程序无法正常启动怎么解决?