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:03:31 阅读更多 →
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:03:31 阅读更多 →
不同品牌斜齿行星减速机如何替换?以PX与PAG系列为例

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

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

2026/7/24 0:03:31 阅读更多 →

最新新闻

《你别回头找我》为何能成为可传播的试听入口

《你别回头找我》为何能成为可传播的试听入口

《你别回头找我》写的是一种状态&#xff1a;《你别回头找我》把“你别”写成可听见的状态&#xff1a;拒绝有时是对自己的保护。听的人多半不是旁观&#xff0c;而是刚好走在同类路口&#xff0c;更适合的播放场是关掉通知、拒绝一次聚会、把话说断的路口。场景立住&#xff0…

2026/7/24 0:11:33 阅读更多 →
基于深度强化学习的电池储能系统优化控制实践

基于深度强化学习的电池储能系统优化控制实践

1. 项目概述在能源转型的大背景下&#xff0c;电池储能系统(BESS)作为平衡电网供需的关键技术&#xff0c;其运行效率直接影响着整个电力系统的经济性和稳定性。传统基于规则的充放电策略往往难以应对复杂多变的电网环境&#xff0c;而深度强化学习(DRL)因其强大的环境适应能力…

2026/7/24 0:10:33 阅读更多 →
影刀RPA 自动化舆情监控:关键词预警与报告生成

影刀RPA 自动化舆情监控:关键词预警与报告生成

影刀RPA 自动化舆情监控&#xff1a;关键词预警与报告生成 作者&#xff1a;林焱 写在前面 品牌负面舆情一旦爆发&#xff0c;几个小时内可能蔓延全网。靠人工每天刷微博、知乎、新闻&#xff0c;根本来不及。影刀可以帮你搭一套724小时的舆情监控系统&#xff1a;定时采集多…

2026/7/24 0:10:33 阅读更多 →
ArkUI Provider 和 Consumer 乱用怎么办:中式美食同类多层筛选页为什么别一路传参数

ArkUI Provider 和 Consumer 乱用怎么办:中式美食同类多层筛选页为什么别一路传参数

先把相关概念说清楚知识点在这个问题里怎么看自定义组件冻结功能用来写多页面栈、TabContent、LazyForEach 和 BuilderNode 混用时的刷新边界状态管理 V1 向 V2 迁移用来拆 State 到 Local、Param、Once、Event 的迁移判断Provider / Consumer用来解释跨层级双向同步&#xff0…

2026/7/24 0:10:33 阅读更多 →
【K8S 运维实战】11-资源管理Requests与Limits

【K8S 运维实战】11-资源管理Requests与Limits

资源管理:Requests/Limits 与 QoS 分级 一句话定位:为什么设了 Limits 还是被 OOM QoS 三级怎么用 ResourceQuota 实战。 写在前面 “我明明设了 memory limit 4G,Pod 还是 OOMKilled 了,这是什么玄学?”——这是我遇到过最经典的资源管理困惑。还有一类:“节点资源没用满,…

2026/7/24 0:10:33 阅读更多 →
OpenClaw+Kimi K2.5+Moltbook企业级AI工作流部署指南

OpenClaw+Kimi K2.5+Moltbook企业级AI工作流部署指南

1. OpenClawKimi K2.5Moltbook部署方案概述这个组合堪称当前最强大的AI工作流解决方案之一。OpenClaw作为自动化控制中枢&#xff0c;Kimi K2.5提供核心AI能力&#xff0c;Moltbook则负责交互界面呈现。三者的结合可以打造出一个智能程度极高的工作助手系统。我在实际部署过程中…

2026/7/24 0:09:32 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化&#xff0c;核心特色&#xff1a;三维 X/Y/Z 三轴空间&#xff0c;所有散点分布在 0~10 立方体空间内&#xff1b;散点使用径向渐变实现立体 3D 圆球质感&#xff1b;支持鼠标 / 触屏拖拽画布&#xff0c;…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls&#xff1a;进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值&#xff0c;并显示每条值的来源、名称、类型和可安全显示的数…

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

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

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

2026/7/24 0:00:29 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/7/23 17:49:47 阅读更多 →

月新闻