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

牛顿法vs高斯牛顿法vs LM算法:三行代码说清核心区别(附性能对比表格)

本文通过对比牛顿法、高斯牛顿法和LM算法的核心迭代代码,揭示了三者在非线性最小二乘优化中的本质区别。LM算法通过引入阻尼因子,在高斯牛顿法的快速收敛与梯度下降的稳定性之间取得平衡,成为工程实践中鲁棒性最强的首选。文章还提供了清晰的性能对比表格,帮助开发者根据初始估计和问题性质快速选择合适算法。

weixin_29062255的博客 419

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

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

weixin_35987446的博客 876

GROMACS+PLUMED联合安装避坑指南:为什么你的plumed patch总是失败?

本文深入解析GROMACS与PLUMED联合安装中补丁失败的常见原因,并提供详细的避坑指南。针对版本兼容性、环境配置和编译选项等关键问题,给出从源码选择、环境搭建到手动合并补丁的完整解决方案,帮助用户成功整合这两个强大的分子动力学工具,实现增强采样模拟。

weixin_29302047的博客 289

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

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

hgq0916的博客 4360

Cocos Creator实战:5步搞定棋牌游戏大厅场景开发(附完整代码)

本文详细介绍了使用Cocos Creator 3.8开发棋牌游戏大厅的5个关键步骤,包括工程配置、动态UI系统实现、核心交互功能开发、性能优化及调试发布技巧。通过模块化代码和实战案例,帮助开发者快速构建高交互性的棋牌游戏大厅,提升用户留存率。

weixin_29002209的博客 355

大模型事件抽取学习——论文学习笔记《LLMs Learn Task Heuristics from Demonstrations:......》

本篇博客介绍一篇发表在2024 ACL main上的文章:《LLMs Learn Task Heuristics from Demonstrations: A Heuristic-Driven Prompting Strategy for Document-Level Event Argument Extraction》 方向:大模型事件抽取 本篇博客为个人阅读论文的总结与笔记,在这里进行简单的分享 论文链接:https://arxiv.org/abs/

weixin_53751318的博客 1852

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

5G NR PDCCH实战解析:从DCI格式到CORESET配置的完整指南

本文深入解析5G NR PDCCH的实战配置,涵盖DCI格式选择、CORESET配置及Search Space优化等关键内容。基于3GPP R16标准,提供现网部署中的典型问题解决方案,如覆盖边缘失步、多用户调度冲突等,帮助提升控制信令传输效率。特别针对5G NR PDCCH的灵活资源分配和自适应编码机制进行详细探讨。

weixin_29231263的博客 499

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语言字符串练习题

描述:find()方法检测字符串中是否包含子字符串str,如果指定 beg(开始)和end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串,返回字符串中,子字符串第一个字符的索引值,否则返回-1。描述:find()方法用来检测字符串中是否包含子字符串str,在指定范围内,如果包含子字符串,返回字符串中,子字符串第一个字符的位置,否则返回-1。命令行先后输入两个字符串,然后利用find()方法找出第二个字符串在第一个字符串中出现的位置。本关需要你编写一个程序,输出字符串的长度。

国家一级致癌物 2026

分享Charles抓包 显示<unknown> 解决方案 !

首先电脑上需要安装charles,然后需要设置手机上的WiFi设置,修改配置中的代理设置,把服务器的主机名设置成你电脑当前的ip地址(需要注意的是,你的代理服务器主机名的ip地址要和你当前连的ip地址的网段需要一致)。像 Charles 这样的工具,虽然功能强大,但仍然需要用户具备一定的配置和排障能力,以应对各种复杂的网络环境。通过将 Charles 的 SSL 证书正确安装到移动设备中,并在设置中启用“允许不安全的内容”选项,最终成功解决了这一问题,并准确抓取到所有请求数据。Charles 显示。

朱雀随云记的博客 8105

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

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

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

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

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

熊大的专栏 2万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

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

静幽水 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

springboot jpa实现多条件动态查询

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

ergouy's blog 1万+

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、付费专栏及课程。

余额充值