当前位置: 首页 > news >正文

AttributeConverter

AttributeConverter 是 JPA 中的一个接口,,用于实体属性和 数据库字段,,之间的转换,,,类似mybatis中的typeHandler

AttributeConverter使用
  • 定义一个类实现AttributeConverter接口,,这个接口有两个泛型,第一个泛型:要转换的当前字段的类型 ,,第二个泛型:数据库中应该映射出来的类型,, 比如json–》 映射出来是String,,但是想使用一个类去接收,前端返回的就不是String,而是json对象

通用的接收,不考虑类的业务,,如果是单个的json可以使用 Map<String,Object> 接收,,如果是 json数组 ,,使用List<Object> 接收

  • 在这个类上面打上@Converter 注解,
  • 在使用这个Converter的字段上 ,打上@Convert(converter = List2Json.class)
@Component
@Converter
public class List2Json implements AttributeConverter<List<Object>,String> {@AutowiredObjectMapper objectMapper;@Overridepublic String convertToDatabaseColumn(List<Object > attribute) {try {return objectMapper.writeValueAsString(attribute);} catch (JsonProcessingException e) {e.printStackTrace();throw new ServerErrorException(9999);}}@Overridepublic List convertToEntityAttribute(String dbData) {if (dbData == null){return null;}try {return objectMapper.readValue(dbData, List.class);} catch (JsonProcessingException e) {e.printStackTrace();throw new ServerErrorException(9999);}}
}

问题: 这样了写了之后,所有对象被反序列化成 Map。。所有的json数组,被反序列化 List<Object>
他就不是一个类,,也就没有一个类具备的业务意义,类应该有自己的职责,内部会有一些自己的内置方法,,并不只是作为数据库映射的实体

解决方法:
不使用Jpa的Converter类型转换,,定义一个通用的工具类,去自己转换,,在setter,和getter方法中

/*** 任何对象变成  数据库中json类型的字符串* @Date 2023/8/3 14:40* @Author cc*/
@Component
public class GenericAndJson {private static ObjectMapper objectMapper;@Autowiredpublic  void setObjectMapper(ObjectMapper objectMapper) {GenericAndJson.objectMapper = objectMapper;}public static <T>  T jsonToObject(String s,Class<T> classT){if (s ==null){return null;}try {T t = objectMapper.readValue(s, classT);return t;} catch (JsonProcessingException e) {e.printStackTrace();throw new ServerErrorException(9999);}}public static<T> String objectToJson(T o){try {return objectMapper.writeValueAsString(o);} catch (JsonProcessingException e) {e.printStackTrace();throw new ServerErrorException(9999);}}/*** 返回的是  List<Map> 不是业务对象*/public static <T> List<T> jsonToList(String s){if (s == null){return  null;}try {List<T> list = objectMapper.readValue(s, new TypeReference<List<T>>() {});return list;} catch (JsonProcessingException e) {e.printStackTrace();throw new ServerErrorException(9999);}}public static <T> T jsonToList(String s,TypeReference<T> tr){if (s == null){return  null;}try {T t = objectMapper.readValue(s, tr);return t;} catch (JsonProcessingException e) {e.printStackTrace();throw new ServerErrorException(9999);}}}

相关文章:

AttributeConverter

AttributeConverter 是 JPA 中的一个接口&#xff0c;&#xff0c;用于实体属性和 数据库字段&#xff0c;&#xff0c;之间的转换&#xff0c;&#xff0c;&#xff0c;类似mybatis中的typeHandler AttributeConverter使用 定义一个类实现AttributeConverter接口&#xff0c…...

【逗老师的PMP学习笔记】8、项目质量管理

目录 一、规划质量管理1、质量管理的发展历史2、戴明环&#xff0c;PDCA理论3、【关键输入】事业环境因素4、【关键输入】成本效益分析5、【关键工具】质量成本6、【关键输出】质量管理计划7、插一嘴&#xff0c;项目的三个标准8、【关键工具】质量测量指标 二、管理质量1、【关…...

Zookeeper集群

目录 一、Zookeeper 概述 1&#xff09;Zookeeper 定义 2&#xff09;Zookeeper 工作机制 3&#xff09;Zookeeper 特点 4&#xff09;Zookeeper 数据结构 5&#xff09;Zookeeper 应用场景 6&#xff09;Zookeeper 选举机制 ●第一次启动选举机制 ●非第一次启动选举机…...

后端进阶之路——Spring Security构建强大的身份验证和授权系统(四)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ 解决算法&#xff0c;一个专栏就够了★ ★ 架…...

【香瓜说职场】第10月(2018.01.29)

自从17年4月份开始辞职创业&#xff0c;已经10个月了。聊聊近况。 一、博客被冻结 冻结原因是我把博客的积分放在淘宝店铺售卖&#xff0c;卖一周就被查了。 我的每个积分售卖0.5元&#xff0c;是全网最低&#xff0c;每个资源下载一般需要2、3个积分。售…...

​LeetCode解法汇总1749. 任意子数组和的绝对值的最大值

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 给你一个整数数组 nums 。一个子数组 [numsl, numsl1, ..., numsr-1, numsr] 的…...

4.2、Flink任务怎样读取文件中的数据

目录 1、前言 2、readTextFile&#xff08;已过时&#xff0c;不推荐使用&#xff09; 3、readFile&#xff08;已过时&#xff0c;不推荐使用&#xff09; 4、fromSource(FileSource) 推荐使用 1、前言 思考: 读取文件时可以设置哪些规则呢&#xff1f; 1. 文件的格式(tx…...

Effective Java笔记(28)列表优于数组

数组与泛型相比&#xff0c;有两个重要的不同点 。 首先&#xff0c;数组是协变的&#xff08; covariant &#xff09; 。 这个词听起来有点吓人&#xff0c;其实只是表示如果 Sub 为 Super 的子类型&#xff0c;那么数组类型 Sub[ ]就是Super[ ]的子类型。 相反&#xff0c;泛…...

做BI领域的ChatGPT,思迈特升级一站式ABI平台

8月8日&#xff0c;以「指标驱动 智能决策」为主题&#xff0c;2023 Smartbi V11系列新品发布会在广州丽思卡尔顿酒店开幕。 ​ 后疫情时代&#xff0c;BI发展趋势的观察与应对 在发布会上&#xff0c;思迈特CEO吴华夫在开场致辞中表示&#xff0c;当前大环境背景下&#xf…...

ELFK——ELK结合filebeat日志分析系统(2)

目录 一、filebeat 二、ELFK 1.原理简介 2.在ELK基础上部署filebeat 一、filebeat Filebeat&#xff0c;轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat&#xff0c;并指定目录与日志格式&#xff0c;Filebeat 就能快速收集数据&#xff0c;并…...

webSocket 协议是什么

webSocket 协议是什么&#xff0c;能简述一下吗&#xff1f; websocket 协议 HTML5 带来的新协议&#xff0c;相对于 http&#xff0c;它是一个持久连接的协议&#xff0c;它利用 http 协议完成握手&#xff0c;然后通过 TCP 连接通道发送消息&#xff0c;使用 websocket 协议可…...

CentOS 7迁移Anolis OS 8

背景&#xff1a;生产环境客户要求操作系统国产化 操作系统&#xff1a;Centos7.9 内核&#xff1a;5.4.108 服务器可以联网&#xff0c;进行在线迁移&#xff1a; # 下载迁移工具软件源 wget https://mirrors.openanolis.cn/anolis/migration/anolis-migration.repo -O /etc/y…...

Transformer 立体视觉 Depth Estimation

1. Intro 立体深度估计具有重要的意义,因为它能够重建三维信息。为此,在左右相机图像之间匹配相应的像素;对应像素位置的差异,即视差,可以用来推断深度并重建3D场景。最近基于深度学习的立体深度估计方法已经显示出有希望的结果,但仍然存在一些挑战。 其中一个挑战涉及使…...

vue去掉所有输入框两边空格,封装指令去空格,支持Vue2和Vue3,ElementUI Input去空格

需求背景 就是页面很多表单输入框&#xff0c;期望在提交的时候&#xff0c;都要把用户两边的空格去掉 ❌使用 vue 的指令 .trim 去掉空格 中间会输入不了空格&#xff0c; 比如我想输入 你好啊 中国, 这中间的空格输入不了&#xff0c;只能变成 你好啊中国 ❌在提交的时候使用…...

认识FFMPEG框架

FFMPEG全称: Fast Forward Moving Picture Experts Group (MPEG:动态图像专家组) ffmpeg相关网站: git://source.ffmpeg.org/ffmpeg.git http://git.videolan.org/?pffmpeg.git https://github.com/FFmpeg/FFmpeg FFMPEG框架基本组件: AVFormat , AVCodec, AVDevice, AVFil…...

Vue3 大屏数字滚动效果

父组件&#xff1a; <template> <div class"homePage"> <NumRoll v-for"(v, i) in numberList" :key"i" :number"v"></NumRoll> </div> </template> <script setup> import { onMounted, r…...

【深度学习注意力机制系列】—— SENet注意力机制(附pytorch实现)

深度学习中的注意力机制&#xff08;Attention Mechanism&#xff09;是一种模仿人类视觉和认知系统的方法&#xff0c;它允许神经网络在处理输入数据时集中注意力于相关的部分。通过引入注意力机制&#xff0c;神经网络能够自动地学习并选择性地关注输入中的重要信息&#xff…...

go 函数

go 语言函数 go 函数函数定义Go函数的特点如下函数作为参数可变参数相同类型可变参数不同类型可变参数 return语句作用概述空的return语句空白标识符多个返回值命名返回值 defer 语句作用引申出来的面试题for defer下面是一个使用defer的示例代码输出结果 匿名函数定义匿名函数…...

python之正则表达式

目录 正则表达式 python正则表达式方法 match search findall finditer compile 元字符匹配 元字符 量词 贪婪匹配和惰性匹配 正则表达式的group 语法 案例 正则表达式 正则表达式又称规则表达式&#xff0c;是使用单个字符串来描述、匹配某个句法规则的字符串…...

【LeetCode每日一题】——219.存在重复元素II

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 哈希表 二【题目难度】 简单 三【题目编号】 219.存在重复元素II 四【题目描述】 给你一个…...

利用Taotoken模型广场为不同任务选择合适大模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 利用Taotoken模型广场为不同任务选择合适大模型 在实际开发工作中&#xff0c;我们常常面临多种任务需求&#xff1a;有时需要模型…...

从零到一:华大HC32L110C6PA GPIO操作避坑指南(附完整代码)

从零到一&#xff1a;华大HC32L110C6PA GPIO操作避坑指南&#xff08;附完整代码&#xff09; 第一次接触华大HC32L110C6PA这款MCU时&#xff0c;我被它小巧的体积和丰富的功能所吸引。但当我真正开始GPIO配置时&#xff0c;却发现官方文档中的某些细节并不像想象中那么直观。…...

AI 智能体 8 层架构:生产级系统构建指南

AI 智能体&#xff08;Agentic AI&#xff09;革命的关键不在更好的提示词&#xff0c;而在于系统化的架构设计。随着企业竞相部署能够自主感知、推理、规划和行动的 AI 智能体&#xff08;AI Agent&#xff09;&#xff0c;真正的挑战已经从"我们能构建吗?“转变为"…...

如何在VSCode中实现高效Mermaid图表实时预览:一站式解决方案

如何在VSCode中实现高效Mermaid图表实时预览&#xff1a;一站式解决方案 【免费下载链接】vscode-mermaid-preview Previews Mermaid diagrams 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-mermaid-preview 还在为技术文档中的图表制作而头疼吗&#xff1f;你是…...

抖音视频批量下载工具终极指南:3分钟实现高效无水印下载

抖音视频批量下载工具终极指南&#xff1a;3分钟实现高效无水印下载 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback sup…...

C51结构体内存分配限制与解决方案

1. C51结构体成员的内存空间限制解析在8051单片机开发中&#xff0c;C51编译器对结构体成员的内存分配有着严格限制。这个问题困扰过不少从标准C转向嵌入式开发的工程师。让我用一个实际案例来解释这个技术细节&#xff1a;struct sensor_data {float data temperature; // 试…...

KMS智能激活脚本:3分钟永久激活Windows和Office的终极指南

KMS智能激活脚本&#xff1a;3分钟永久激活Windows和Office的终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而烦恼吗&#xff1f;Office文档突然变…...

跨平台资源下载神器:如何突破平台限制轻松获取网络内容?

跨平台资源下载神器&#xff1a;如何突破平台限制轻松获取网络内容&#xff1f; 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader …...

量子机器学习革新气象预测:高效台风轨迹建模

1. 量子机器学习在气象预测中的革新应用台风轨迹预测一直是气象学领域的重大挑战。传统数值天气预报(NWP)模型依赖于超级计算机集群&#xff0c;需要处理海量的大气动力学数据&#xff0c;计算成本高昂且能耗巨大。以台湾地区为例&#xff0c;每年平均遭受3.5次台风袭击&#x…...

Ubuntu虚拟机磁盘空间耗尽导致MySQL启动失败的系统恢复与预防指南

1. 问题现象与核心原因剖析最近在折腾Ubuntu虚拟机时&#xff0c;遇到了一个挺典型的开机故障&#xff1a;系统启动时卡住&#xff0c;屏幕上赫然显示着“Failed to start MySQL Community Server”的错误信息&#xff0c;紧接着系统就停滞不前&#xff0c;无法进入图形界面。这…...