JPA 返回的接口 数据怎么样装到对象里边

发布时间:2026/11/7 4:22:11

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两种框架各司其职互不干扰。
延伸阅读

更多相关文章

2026/11/5 1:27:48

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

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

2026/11/4 0:48:15

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

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

2026/11/4 0:15:50

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

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

2026/11/7 4:18:23

六合考高压电工证多久拿证?报名避坑+备考攻略全解析

六合考高压电工证多久拿证?报名避坑+备考攻略全解析 你是不是正愁找不到靠谱的报名渠道,担心被中介坑?现在考高压电工证, 多久拿证 成了很多人的头等大事。尤其在 六合地区 ,不少想从事电力相关工作的朋友,都在问“ 六合考高压电工证…

2026/11/7 4:18:23

乌苏高级电工证考试太忙没时间复习?电子证书流程全在这

乌苏高级电工证考试太忙没时间复习?电子证书流程全在这 工地太忙根本没时间复习考试,乌苏高级电工证考试一拖再拖,电子证书还没到手,这事儿谁懂?特种作业证关系到你的安全作业资格,也直接影响你能否正常上岗,别再因为没时间复习而错失良机。这篇文章就…

2026/11/7 4:18:23

电工证学时可以累计吗?网上查询才知道真相

电工证学时可以累计吗?网上查询才知道真相 工地太忙根本没时间复习考试,这几乎是每个特种作业人员的切身感受。尤其是像电工证这种需要实操和理论结合的证书,学时要求一多,很多人都会担心自己能不能在规定时间内完成。其实, 电工证学时可以累计吗…

2026/11/7 4:18:23

梁平哪里审电工证通过率揭秘 工地太忙怎么考

梁平哪里审电工证通过率揭秘 工地太忙怎么考 工地太忙根本没时间复习考试,你是不是也这样?电工证是建筑工地上最基础也是最重要的证件之一,但真正能拿到手的,却少之又少。很多人问:“梁平哪里审电工证?怎么考才能通过?”这个问题背后,其实是很多人在…

2026/11/7 4:13:23

工地太忙根本没时间复习考试 华阴市电力电缆作业证在哪考有妙招

工地太忙根本没时间复习考试 华阴市电力电缆作业证在哪考有妙招 你是不是也经常在工地上忙得连饭都顾不上吃,更别说抽空复习考试了?别急,华阴市电力电缆作业证的考试和备考其实可以有更高效的方法。如果你正在为【华阴市电力电缆作业证在哪考】发愁,或者…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代&#xff0c;基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而&#xff0c;与配合度高的人类不同&#xff0c;宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态&#xff0c;更无法控制光照环境。实际应用中&#xff0c;我们常…

2026/11/6 10:49:01

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/7 0:03:08

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科 实操考试心里没底怕挂科?你不是一个人。特别是在郑州这样的城市,很多施工企业负责人和一线作业人员在报考电工证和钳工证时都面临着同样的困惑。到底该考哪个证?哪个更适合自己?哪个证书…

2026/11/7 0:03:08

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱?

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱? 之前考的证在外省能不能转过来?这个问题我遇到太多了,今天就拿广西电工证办理流程来具体说说,别再走弯路了。广西电工证的报考、复审、继续教育这些环节,如果你不了解,真的会吃大亏,尤其对于从…

2026/11/7 0:03:08

电气电工证都有哪些保姆级教程

电气电工证都有哪些保姆级教程 你是不是正愁不知道去哪报名,怕被中介坑?别急,这篇保姆级教程专为河南初次报考人员准备,帮你搞清楚 电气电工证都有哪些 ,以及如何避开那些坑。 电气电工证都有哪些?别被五花八门的证书搞懵了…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代&#xff0c;基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而&#xff0c;与配合度高的人类不同&#xff0c;宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态&#xff0c;更无法控制光照环境。实际应用中&#xff0c;我们常…

2026/11/6 10:49:01

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑