springboot jpa自定义查询结果封装自定义对象

SpringBoot第四讲扩展和封装Spring Data JPA(一)_自定义Repository和创建自己的BaseRepository 这一讲主要介绍Spring Data JPA的封装。和设计相关的东西都是仁者见仁,智者见智的事情,如果你有更好的封装方案可以和我交流,互相学习。这一讲会讲如下一些内容 - 扩展Spring Data JPA实现自己的一些特殊方法 - 创建一个自己的BaseRepository - 封装Specification来快速完成一些简单的查询操作 - 封装分页和排序操作。在一些特殊时候,我们会设计到 阅读详情

使用Jpa自定义查询时,需要将查询结果自动封装对象中,有两种比较简单的方法:

方法一:返回对象为interface,只需要定义属性的get方法,jdk动态代理封装数据,执行原生sql比较方便,只需要字段和属性名一致。

数据表实体类

@Setter
@Getter
@Entity
@ToString
@DynamicUpdate
@DynamicInsert
@Table(name = "user")
public class User implements Serializable {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long userId;// 用户ID

	private String userName;// 用户名

    /**** 其他字段省略 ****/

}

jpa执行原生sql查询,字段别名需要定义成对象属性名一样

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

    @Query(value = "select user_name as userName, user_id as userId from user where user_id = ?1", nativeQuery = true)
    User queryUserByUserId(Long userId);

}

另外执行原生sql查询可以自动封entity类,但是想多返回其它字段,无法封装到对象中,示例

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

    @Query(value = "select u.* from user u where u.user_id = ?1", nativeQuery = true)
    User queryByUserId(Long userId);

}

自定义结果,User只能定义为interface,结果将由jdk动态代理封装结果,不足之处是将结果打印日志,不会显示内容,因为没有toString方法,显示内容org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap@6c09dcc2

public interface User {

	/** 用户名 */
	String getUserName();

	/** 用户ID */
	Long getUserId();

}

方法二:返回对象为自定义class,可定义toString方法,打印日志方便。对象属性不要求名称一致。

jpa执行HQL查询,在查询时对结果进行封装,注意这里使用的构造方法一定要写自定义类的全包名,不写全包名会报错

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

     @Query(value = "select new com.xxx.vo.UserVo(u.userId, u.userName) from User u where u.userId = ?1")
     UserVo queryUserVoByUserId(Long userId);

}

自定义结果,UserVo定义为class,需要定义封装数据的构造方法

package com.xxx.vo;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Setter
@Getter
@ToString
@NoArgsConstructor
public class UserVo {

	private Long userId;// 用户ID
	private String userName;// 用户名


	public UserVo(Long userId, String userName) {
		super();
		this.userId = userId;
		this.userName= userName;
	}

}

总结:

方法一适合执行原生SQL查询,字段名称和接口get方法一致即可,不足之处,将结果对象打印日志不显示内容,转json之后是{},可以调用接口方法一个一个打印;

方法二适合执行HQL查询,不可执行原生SQL,字段名不需要一致,只需要构造方法参数位置正确;

spring boot 集成jpa 多种分页查询 一、查询分为两种: 1、面向对象查询 2、自定义查询 1、面向对象查询简介 引入jar包 <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-comm... 阅读详情

相关推荐

SpringBoot Jpa实现联合查询,自定义查询后的结果集

如果要自定义查询的结果集有3种方法: 使用List<Object[]>来接收结果,只支持原生sql查询。 使用自定义对象来接收结果,支持JPA,JPQL查询。 使用自定义的接口来映射结果,支持JPA,JPQL,原生sql查询。 本章将使用原生sql实现接收联合查询后的结果集 持久层 @Repository public interface NurseDao extends JpaR...

qq_43767445的博客 1423

jpa查询返回自定义对象、返回指定VO、POJO

jpa查询返回自定义对象、返回指定VO、POJO,JPA查询前会做大量处理,还有线程通知的操作。若并发大,处理性能直线下降。但是jpa就因为做了大量处理,对多数据库兼容极好,操作方便。有时候你想查询某个表,不想要某个字段内容太长时;

凌康的博客 5294

SpringBoot第五讲扩展和封装Spring Data JPA(二)_利用Specification封装简单查询

上一讲讲解了如何使用Spring Data JPA封装一个自己的BaseRespoistory工厂,这个在实际开发中是非常有必要的,今天我们来进一步封装Spring Data JPA的查询。Spring Data JPA已经帮助我们很大程度上简化了我们的查询操作,我们甚至只要写一个接口,然后单纯的写一些方法就可以完成各式各样的查询,但是对于我们程序设计人员而言,总希望所有的查询变得更加的简单方便,为

ynkonghao的博客 7018

Spring Data Jpa返回自定义对象的三种方法

本文针对不同使用场景介绍Spring Data Jpa返回自定义对象的三种方法,按需食用

我是坏人哦 1万+

SpringBoot第23讲:SpringBoot集成MySQL - 基于JPA的封装

在实际开发中,最为常见的是基于数据库的CRUD封装等,比如SpringBoot集成MySQL数据库,常用的方式有JPA和MyBatis; 本文是SpringBoot第23讲,主要介绍基于JPA方式的基础封装思路

Jet_qi的博客 501

MTK Linux Charger驱动分析(二) - power_supply_core.c

的核心作用可以概括为:提供统一的电源管理框架;管理电源设备注册、属性访问、事件通知;封装sysfs 接口和 uevent 通知,屏蔽硬件细节;驱动开发者只需要实现,不关心底层通知和接口细节。简单来说,它是电源子系统的“大脑和中枢”,具体的电池/充电器只是“信息源”。

iTom1900 1490

java查询结果自定义显示_JPA自定义对象接收查询结果集操作

最近使用JPA的时候,碰到需要自定义查询结果集的场景,网上搜了一下,都是需要自定义方法写一大串代码实现的,太繁琐了,有那时间还不如用mybaits。用JPA就是要尽量通过声明接口解决持久层问题,要不然鬼用。逼得没办法去了官网看看文档,再没有就放弃了,没时间看源码。最终找到我想要的结果了。例如,传统的JPA接口实现如下所示:class Person {@Id UUID id;String first...

weixin_35987446的博客 876

基于FSL的DTI数据预处理流程

最近在学习处理DTI数据,总结了一份应用FSL做DTI数据预处理的流程与大家交流交流。如果有错误的地方欢迎大家指正!        我用的数据是Philips的数据,如果是GE或者西门子的数据可能会有所不同。   原始数据:包括3DT1数据和高分辨率DTI数据,均是dicom格式。 工具:MRICRON和FSL,所有的命令均在Linux的终端中运行。   1.格式转换:将后缀名为dcm

zaza_zaza的博客 2万+

springDataJpa入门教程(3-2)-基于EntityManager原生sql多表联合查询+动态条件查询+分页返回自定义实体类对象

springDataJpa入门教程(3-2)-基于EntityManager原生sql多表联合查询+动态条件查询+分页返回自定义实体类对象 在上一节,讲到了基于EntityManager原生sql多表联合查询+动态条件查询+分页,查询的结果集是用Object数组封装的,查询起来不是很方便。所以这节来介绍如何 将EntityManager的查询结果封装到自定义实体类对象中。有需要源码的朋友,请到gi...

hgq0916的博客 4360

DLMS-Blue-Book蓝皮书—曲线类

attribute_index 1 指的是第 1 个属性(即 logical_name),attribute_index 2 指的是第 2 个属性,等等;如果其他“曲线通用类”对象捕获了这个缓冲区,它们的缓冲区也将被清空,以保证它们的缓冲区条目是同质的。如果捕获对象是曲线通用类的缓冲区,则 data_index 标识缓冲区(即列)中的捕获对象(即内部曲线通用类中的列);如果曲线通用类已排序,则调用捕获方法将把新条目存储在缓冲区中的适当位置,移动所有后续条目,并可能丢失最不相关的条目。

一个bug是bug,多个bug能work 1454

计算机视觉研究方向有哪些?什么方向最好出论文创新点

计算机视觉(CV)是人工智能中一个活跃且应用广泛的研究领域,旨在让计算机理解和处理图像与视频。其主要研究方向包括图像分类、目标检测、图像分割、姿态估计、图像生成与重建、视频理解、三维视觉和跨模态视觉理解。这些方向不仅涉及基础理论,还紧密联系实际应用,适合发表论文和实现项目落地。为了在CV领域取得创新,建议关注跨模态学习、小样本学习、图像生成模型的控制与轻量化、视频分析以及医学图像分析等方向。此外,通过阅读顶会论文、复现SOTA方法、模型微调和数据集创新等方式,可以有效切入研究并产生有价值的成果。

OpenCVtuxiang的博客 3549

Springboot Jpa自定义查询的结果集

如果要自定义查询的结果集有3种方法: 使用List&amp;lt;Object[]&amp;gt;来接收结果,只支持原生sql查询。 使用自定义对象来接收结果,支持JPA,JPQL查询。 使用自定义的接口来映射结果,支持JPA,JPQL,原生sql查询。 官网文档链接 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#pro...

miskss的博客 8208

科研党必看!Zotero+Claude3插件实战:如何用AI高效阅读文献(附详细配置步骤)

本文详细介绍了如何通过Zotero与Claude3插件的深度整合,实现科研文献的高效阅读与管理。从环境配置到核心功能实战,包括智能摘要生成、精准学术翻译和论文写作辅助等,帮助科研人员大幅提升工作效率。特别适合需要处理大量文献的研究者使用。

o0p1q2r3的博客 434

SpringBoot集成jpa 一篇就够了 超详细

SpringBoot集成jpa 网上有很对jpa的介绍,但是都不是很全,这边根据公司的实际使用情况进行的总结。 JPA、Hibernate、Spring data jpa之间的关系 主要参考https://my.oschina.net/u/3080373/blog/1828589 大家可以读一下这篇文章 什么是JPA? 全称Java Persistence API,可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。 为我们提供了: 1)ORM映射元数据:JPA支持XML

cmx1060220219的博客 8万+

淘宝滑块验证码破解:Python模拟鼠标轨迹过关详解

本文全面解析了淘宝滑块验证码的破解流程,从机制分析、图像处理、轨迹模拟到自动化实现,提供了完整的Python解决方案。随着2026年风控技术的升级,单纯依靠轨迹模拟已经难以达到高通过率,未来趋势是结合强化学习生成更自然的轨迹,并利用深度神经网络进行端到端的验证码绕过。此外,各大平台正逐步推广"无感验证"和"行为式验证码",将验证融入到用户正常操作中,这对爬虫技术提出了更高的挑战。技术本身是中立的,关键在于使用者的目的。希望本文能帮助开发者更好地理解验证码对抗技术,从而设计出更安全的防御系统。

2201_76125261的博客 97

CasADi - 最优控制开源 Python/MATLAB 库

CasADi 是一款开源软件工具,用于数值优化,特别是最优控制(即涉及微分方程的优化)。该项目由 Joel Andersson 和 Joris Gillis 在鲁汶工程大学工程优化中心 (OPTEC) 在读博士生在 Moritz Diehl 的指导下发起。本文档旨在简要介绍 CasADi。

机器人控制与仿真应用 7935

SpringBoot中基于JPA的多条件动态查询二次封装

最近地摊经济盛行了,对于wshanshi这个吃货来说是再幸福不过的了。逛吃,逛吃,逛吃…怕是开心的要飞起来了呢! 要不咱也摆摊卖点啥去?看了看镜子里帅气的面孔,笑容愈发… “老板,来一份wshanshi。酸甜,微辣,微辣…” “好嘞!您稍等!我这就去把wshanshi叫来!” “小二,来说一下SpringBoot中基于JPA的多条件动态查询封装。讲不好不但不给饭钱,还要把你们wshanshi小姐姐赔给我!” “好嘞客官,给您免单!赶紧把她带走,带走!把我吃穷了都!” 用过SpringDataJPA的都.

程序和我有一个能跑就行了 4849

【YOLO11改进 - 检测头】Detect_LSCD检测头:量化的检测头,进一步提升模型的检测效率和精度

【YOLO11改进 - 检测头】Detect_LSCD检测头:量化的检测头,进一步提升模型的检测效率和精度

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 4102

SpringBoot中JPA多表联合自定义查询@Query

SpringBoot中JPA多表联合自定义查询@Query 版权声明:本文为博主原创文章,转载请注明出处,谢谢。 其他相关文章见:个人博客站点:www.val1ant.xin SpringBoot中JPA多表联合自定义查询@Query 1. 实体类 2. 数据库操作类 1. 原生SQL查询 2. 默认的JPQL方法 3. 数据处理类 1. 实体类...

熊大的专栏 2万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SpringBoot使用JPA如何查询部分字段

用过JPA的都知道,只需要继承JpaRepository 根据Jpa的函数命名规范写出接口中的函数,不需要实现,底层就可以自动解析成各种数据库的sql语句,进行增删改查等操作。 自定义简单的查询方法: 如findByUserName,findByUserNameOrEmail(String username, String email)等条件的属性名称与个数要与参数的位置与个数一一对应,JpaRe...

静幽水 2万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

springboot jpa实现多条件动态查询

最近学习了springboot项目,用到了对条件动态查询,做一些必要的笔记,一来是对自己学习的知识的巩固,二来对有同样问题的人有参考作用 文章目录一 原理简介二 代码举例三 总结 一 原理简介 使用Spring Data JPA进行数据操作的时候一般有操作的复杂程度分为三个档次。 1、使用Spring Data JPA接口。 JpaRepository继承于PagingAndSortingRepository,所以它传递性地拥有了以上接口的所有方法,同时,它还继承了另外一个QueryByExampl.

ergouy's blog 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

springboot jpa中返回自定义对象

项目中使用springboot jpa进行持久层操作,大部分的操作不用手写sql。最近需要根据部门查询所有的用户,但是只需要用户id和用户userName两个字段,并不需要所有的字段。 1.首先需要自定义vo来接收字段,这里注意需要使用 @JsonProperty将属性与数据库字段对应上,并需要重写构造方法,不然会报错 @Data public class UserDto { /** ...

蓝色格子ren的博客 2331

springboot jpa 返回结果自定义查询

这里自定义的实体是没有在数据映射的实体。可以返回聚合函数的值。(个人理解可以。。。。。。) 第一种方法 实体类。(这里本人使用的是idea) @Data public class NameOnlyDto implements Serializable { private String firstName; private String lastName; ...

penliyoushui的博客 2732

SpringBoot ——JPA分页查询

JpaRepository提供了如下表所述的内置查询: 方法 描述 List findAll() 返回所有实体 List findAll(Iterable ids) 返回指定id的所有实体 T getOne(ID id) 根据id返回对应的实体,如果未找到,则返回空 List findAll(Sort sort) 返回所有实体,按照指定顺序排序返回 ...

ljcgit的博客 8076

Springboot jpa使用sum()函数返回结果如何接收

1、需求 我的需求是统计域名以及域名出现的次数。 之前使用springboot jpa都是把数据库中的表跟实体类绑定,创建继承JpaRepository的接口。如下: @Repository public interface UrlsRepository extends JpaRepository<Urls, String> { Optional<Urls&...

ununie的博客 2万+

SpringBoot整合JPA

SpringBoot整合JPA

YIYIYI 1万+
上一篇: NacosWatch不支持监听订阅服务节点变化发布事件
下一篇: Eclipse界面图标非常小问题解决
alairfong
博客等级 码龄15年 8粉丝 7原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值