JPA 返回的接口 数据怎么样装到对象里边
在 JPA 中将查询结果映射到自定义对象VO/DTO主要有以下几种方式。结合你项目中的实际情况同时使用了 JPA 和 MyBatis-Plus我按推荐度从高到低列出一、接口投影Interface Projection—— 你最熟悉的方式这是你已经在用的方式适合只读查询。javapublic interface DrivingRecordVO { String getVin(); Date getTime(); String getField(); }Repository 中直接返回javaQuery(value SELECT vin, time, field FROM driving_record, nativeQuery true) ListDrivingRecordVO findRecords();优点零配置JPA 自动映射。缺点只能读不能写需要 getter 命名与 SQL 列名匹配。二、类投影Class-based DTO Projection使用普通 POJO 类带构造方法或 setter更灵活。方式一使用构造方法推荐javaData AllArgsConstructor public class DrivingRecordDTO { private String vin; private Date time; private String field; }RepositoryjavaQuery(SELECT new com.seazon.cloud.pojo.vo.DrivingRecordDTO(a.vin, a.time, b.field) FROM DrivingRecord a LEFT JOIN BEntity b ON a.vin b.vin) ListDrivingRecordDTO findRecords();注意必须用JPQL不是原生 SQL且 DTO 必须有对应的全参构造方法。方式二使用 setter 映射原生 SQLjavaData public class DrivingRecordDTO { private String vin; private Date time; private String field; // 有默认无参构造即可JPA 通过 setter 赋值 }RepositoryjavaQuery(value SELECT vin, time, field FROM driving_record, nativeQuery true) ListDrivingRecordDTO findRecords();要求DTO 有无参构造 setter 方法且 setter 名称与列名对应。三、使用SqlResultSetMappingNamedNativeQuery这是 JPA 规范的原生方式适合复杂映射。实体类上定义javaEntity NamedNativeQuery( name DrivingRecord.findRecords, query SELECT vin, time, field FROM driving_record, resultSetMapping DrivingRecordDTOMapping ) SqlResultSetMapping( name DrivingRecordDTOMapping, classes ConstructorResult( targetClass DrivingRecordDTO.class, columns { ColumnResult(name vin, type String.class), ColumnResult(name time, type Date.class), ColumnResult(name field, type String.class) } ) ) public class DrivingRecord { // ... }Repository 通过Query的name引用javaQuery(name DrivingRecord.findRecords, nativeQuery true) ListDrivingRecordDTO findRecords();四、使用Tuple手动转换适合需要动态处理结果的场景。javaQuery(value SELECT vin, time, field FROM driving_record, nativeQuery true) ListTuple findRecordsAsTuple();Service 中手动转换javaListDrivingRecordDTO result tuples.stream() .map(t - new DrivingRecordDTO( t.get(vin, String.class), t.get(time, Date.class), t.get(field, String.class) )) .collect(Collectors.toList());五、使用 MyBatis-Plus你已引入强烈推荐既然你的项目中同时有 JPA 和 MyBatis-Plus复杂查询尤其涉及窗口函数、多表关联直接用 MyBatis-Plus 最方便。javaMapper public interface DrivingRecordMapper extends BaseMapperDrivingRecord { Select(SELECT vin, time, field FROM driving_record) ListDrivingRecordDTO findRecords(); }MyBatis-Plus 会自动将查询结果的列名映射到 DTO 的字段通过 setter 或构造方法。六、总结对比方式适用场景优缺点接口投影简单只读查询最简单但扩展性差类投影JPQL 构造JPQL 查询类型安全支持复杂构造类投影原生 SQL setter原生 SQL灵活但需要注意命名匹配SqlResultSetMapping复杂映射、多表关联最标准但配置繁琐Tuple 手动转换动态字段最灵活但代码冗长MyBatis-Plus复杂查询、原生 SQL最简单与你项目契合度高七、根据你场景的推荐你的场景推荐方式简单查询1-2 张表接口投影方式一JPQL 查询类投影 构造方法方式二复杂 SQL窗口函数、多表关联MyBatis-Plus方式五需要动态字段返回Tuple 手动转换方式四最省事的选择既然你的项目已经引入了 MyBatis-Plus建议将涉及复杂 SQL 的查询全部交由 MyBatis-Plus 处理直接返回你定义的 VO/DTO 对象。这样 JPA 只负责简单的 CRUD两种框架各司其职互不干扰。

相关新闻

java 两个 long id 怎么合并成一个long id 并且不重复

java 两个 long id 怎么合并成一个long id 并且不重复

“把两个 Long ID 合并成一个唯一的 Long ID,且保证不重复”这个需求,在 Java 里直接做数学上的“完美合并”是不可能的。因为两个 Long(各 64 位)要合并成一个 Long(64 位),在信息论上是有损压…

2026/7/24 0:04:07阅读更多 →
jdk8 把list 扁平化成String 多个以逗号分隔

jdk8 把list 扁平化成String 多个以逗号分隔

在 JDK 8 中&#xff0c;将 List 扁平化为以逗号分隔的 String&#xff0c;有几种非常简洁且高效的方法。&#x1f680; 推荐方案&#xff1a;使用 Collectors.joining()这是最标准的 Java 8 写法&#xff0c;适用于 List<String>。javaimport java.util.stream.Collecto…

2026/7/24 0:04:07阅读更多 →
不同品牌斜齿行星减速机如何替换?以PX与PAG系列为例

不同品牌斜齿行星减速机如何替换?以PX与PAG系列为例

不同品牌斜齿行星减速机如何替换&#xff1f;以 PX 与 PAG 系列为例 一、系列对应不等于型号直接互换 PX 与 PAG 都属于斜齿、方法兰、输出轴式精密行星减速机&#xff0c;结构形式和应用方向具有对应关系。 原设备使用PX系列时&#xff0c;可以优先从PAG系列中寻找替换型号。但…

2026/7/24 0:04:07阅读更多 →
《源纹天书》第二百一十一章至第二百一十五章:第四世界的发现、崩溃日志的分析、归零者遗留的分区、隐藏接口的激活、四界联合的曙光!

《源纹天书》第二百一十一章至第二百一十五章:第四世界的发现、崩溃日志的分析、归零者遗留的分区、隐藏接口的激活、四界联合的曙光!

&#x1f4cc; 作者介绍哈喽&#xff0c;各位道友&#xff0c;我是 CodeStats。一个在底层技术上"考古"了四年的硬核爱好者&#xff0c;也是 WWAIC&#xff08;全周项目AI编程&#xff09;范式的提出者和实践者。我曾手写过一个完整的Java Web框架&#xff08;从IoC容…

2026/7/24 1:20:22阅读更多 →
英文AI率超标不用慌!学长手把手教你英文降ai,高效降低ai率

英文AI率超标不用慌!学长手把手教你英文降ai,高效降低ai率

相信很多同学都有过这种崩溃时刻&#xff1a;熬了很久才写完的文章&#xff0c;反复校对修改、重复率完全达标&#xff0c;自测Turnitin后&#xff0c;却还是不合格。哪怕按照常规方法微调句式、替换词汇&#xff0c;但重新检测后AIGC标红依旧严重。 但其实呢&#xff0c;英文…

2026/7/24 1:20:22阅读更多 →
鸿蒙新特性:@ohos.display 屏幕信息实验室实战 —— 分辨率、刷新率、密度与折叠状态监听

鸿蒙新特性:@ohos.display 屏幕信息实验室实战 —— 分辨率、刷新率、密度与折叠状态监听

引言 屏幕是应用与用户交互的唯一窗口。应用的布局适配、字体缩放、图片资源选择&#xff0c;都依赖对屏幕参数的准确感知。HarmonyOS NEXT 通过 ohos.display 模块将屏幕元信息统一暴露为同步可读的属性和事件回调——分辨率、刷新率、像素密度、旋转角度、折叠状态、录屏检测…

2026/7/24 1:20:22阅读更多 →
新手写小说软件怎么选?10款爆火的AI写小说工具真实测评【7月最新指南】

新手写小说软件怎么选?10款爆火的AI写小说工具真实测评【7月最新指南】

深耕网文写作五年&#xff0c;踩过无数工具坑&#xff0c;从新手摸索到稳定码字&#xff0c;我太清楚大家写文的痛点&#xff1a;卡文断更、小说大纲模板不会套用、找不到优质小说的素材、不懂新手如何开始写小说。 如今各类AI写小说工具层出不穷&#xff0c;很多作者挑得眼花…

2026/7/24 1:20:22阅读更多 →
鸿蒙新特性:@ohos.net.connection 网络连接诊断实验室实战 —— 网络检测、带宽查询与 DNS 解析

鸿蒙新特性:@ohos.net.connection 网络连接诊断实验室实战 —— 网络检测、带宽查询与 DNS 解析

引言 网络是移动应用的命脉。在开发中&#xff0c;我们需要知道设备当前是否联网、连接的是 WiFi 还是蜂窝网络、带宽多少、DNS 解析是否正常。HarmonyOS NEXT 通过 ohos.net.connection 模块将这些网络诊断能力统一暴露为简洁的同步与异步 API&#xff0c;大部分操作无需权限即…

2026/7/24 1:20:22阅读更多 →
Java开发者转型大模型应用开发的实战指南

Java开发者转型大模型应用开发的实战指南

1. 从Java工程师到AI开发者的转型之路 三年前&#xff0c;我还在某互联网公司做着传统的Java后端开发&#xff0c;每天和Spring Boot、MySQL、Redis打交道。直到去年公司裁员&#xff0c;我才意识到传统开发岗位的竞争已经白热化。在失业后的三个月里&#xff0c;我完成了从Jav…

2026/7/24 1:18:22阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中&#xff0c;我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源&#xff0c;还是配置文件、证书等&#xff0c;都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下&#xff0c;但这…

2026/7/24 0:58:53阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP&#xff08;轻量级目录访问协议&#xff09;作为企业级身份认证的黄金标准&#xff0c;已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时&#xff0c;发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 0:58:53阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”&#xff0c;而是以可解释、可审计、可迭代的方式&#xff0c;赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 0:58:53阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好&#xff0c;我是一名编程初学者&#xff0c;同时这也是我编程学习之路上的第一篇博客。在这里&#xff0c;我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手&#xff0c;目前在学习c语言&#xff0c;我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:06阅读更多 →
【LeetCode 54】螺旋矩阵

【LeetCode 54】螺旋矩阵

问题描述&#xff1a; 解法&#xff1a; 1、模拟&#xff08;参考自【LeetCode 54】螺旋矩阵-CSDN博客&#xff09; int *spiralOrder(int **matrix, int matrixSize, int *matrixColSize, int *returnSize) {static const int dirs[4][2] {{0, 1}, {1, 0}, {0, -1}, {-1, …

2026/7/24 0:00:06阅读更多 →
2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

知春路不相信模型领先今年WAIC大会&#xff0c;昔日AI六小龙来了五家&#xff0c;分别是Kimi、阶跃星辰、Minimax、百川智能、零一万物。连放弃基模的百川和零一万物都来了&#xff0c;唯一缺席的竟是近几个月来风光无限的智谱。&#xff08;DeepSeek一直不参加&#xff09;WAI…

2026/7/24 0:00:06阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时&#xff0c;发现推理速度只有可怜的 1-2 FPS&#xff0c;而别人的演示视频却能跑到 30 FPS 以上&#xff0c;那么问题很可能不在模型本身&#xff0c;而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后&#xff0c;会直接使用官方示例…

2026/7/23 22:58:43阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一&#xff1a;为什么你需要了解 Coze 和 Dify&#xff1f;如果你对 AI 应用开发感兴趣&#xff0c;但一看到“大模型”、“智能体”、“工作流”这些词就头疼&#xff0c;觉得门槛太高&#xff0c;那这篇文章就是为你准备的。很多开发者&#xff0c;包括我自己&#…

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会&#xff1a;配图一直是个让人头疼的问题。2026年&#xff0c;AI生图工具已经非常成熟了&#xff0c;但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1&#xff1a;速度之王2026年6月11日&#xff0c…

2026/7/23 18:58:18阅读更多 →