JPA原生sql查询

SpringData JPA进阶查询—JPQL/原生SQL查询、分页处理、部分字段映射查询 上一篇介绍了入门基础篇SpringDataJPA访问数据库。本篇介绍SpringDataJPA进一步的定制化查询,使用JPQL或者SQL进行查询、部分字段映射、分页等。本文尽量以简单的建模与代码进行展示操作,文章比较长,包含查询的方方面面。如果能耐心看完这篇文章,你应该能使用SpringDataJPA应对大部分的持久层开发需求。如果你需要使用到动态条件查询,请查看下一篇博客,专题介绍SpringD 阅读详情

package com.cndatacom.jpa.entity;

 

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.Table;

 

@Entity

@Table(name="t_user")

public class User {

     

    /**

     * 主键

     */

    @Id

    @GeneratedValue

    private Long id;

     

    /**

     * 名字

     */

    @Column(name="name",length=50)

    private String name;

     

    /**

     * 密码

     */

    @Column(name="password",length=20)

    private String password;

     

    /**

     * 邮箱

     */

    @Column(name="email",length=50)

    private String email;

     

    /**

     * 年龄

     */

    @Column(name="age",length=3)

    private int age;

     

    public User() {

         

    }

     

    //以下省略getter/setter方法

    //......

 

 

         

}

测试:

 

package com.cndatacom.jpa.test;

 

import java.util.List;

 

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

import javax.persistence.Query;

 

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

 

import com.cndatacom.jpa.entity.User;

 

 

/**

 * 测试JPA原生SQL查询

 * @author Luxh

 */

public class TestNativeQuery {

EntityManagerFactory emf = null;

     

    @Before

    public void before() {

        //根据在persistence.xml中配置的persistence-unit name 创建EntityManagerFactory

        emf = Persistence.createEntityManagerFactory("myJPA");

    }

     

    @After

    public void after() {

        //关闭EntityManagerFactory

        if(null != emf) {

            emf.close();

        }

    }

     

         

    /**

     * 查询的结果是对象数组的集合

     */

    @Test

    public void testNativeQuery1() {

        EntityManager em = emf.createEntityManager();

        //定义SQL

        String sql = "SELECT * FROM t_user";

        //创建原生SQL查询QUERY实例

        Query query =  em.createNativeQuery(sql);

        //执行查询,返回的是对象数组(Object[])列表,

        //每一个对象数组存的是相应的实体属性

        List objecArraytList = query.getResultList();

        for(int i=0;i<objecArraytList.size();i++) {

            Object[] obj = (Object[]) objecArraytList.get(i);

           //使用obj[0],obj[1],obj[2]...取出属性         

        }

        em.close();

    }

     

     

    /**

     * 查询的结果是实体的集合

     */

    @Test

    public void testNativeQuery2() {

        EntityManager em = emf.createEntityManager();

        //定义SQL

        String sql = "SELECT * FROM t_user";

        //创建原生SQL查询QUERY实例,指定了返回的实体类型

        Query query =  em.createNativeQuery(sql,User.class);

        //执行查询,返回的是实体列表,

        List<User> userList = query.getResultList();

         

        em.close();

    }

     

     

    /**

     * 查询单个属性

     * 返回的是这个属性值的集合

     */

    @Test

    public void testNativeQuery3() {

        EntityManager em = emf.createEntityManager();

        //定义SQL

        String sql = "SELECT t.name FROM t_user t";

        //创建原生SQL查询QUERY实例

        Query query =  em.createNativeQuery(sql);

        //执行查询,返回的是String类型的集合,因为name这个属性是String类型

        List<String>  resultList = query.getResultList();

        em.close();

    }

     

     

    /** 

       * 查询多个属性

       * 返回的是这些属性值的数组的集合

       */  

    @Test  

    public void testNativeQuery4() {   

        EntityManager em = emf.createEntityManager();  

        //定义SQL        

        String sql = "SELECT t.name,t.age,t.email FROM t_user t";      

        //创建原生SQL查询QUERY实例     

        Query query =  em.createNativeQuery(sql);      

        //执行查询,返回的是查询属性值数组的集合      

        List objecArraytList = query.getResultList();

        for(int i=0;i<objecArraytList.size();i++) {     

            Object[] obj = (Object[]) objecArraytList.get(i);

             //使用obj[0],obj[1],obj[2]取出属性

        }      

        em.close();

         

    }

     

}

 

2025年三级等保新规实战:从零开始搭建企业安全防护体系(附完整配置清单) 本文详细解析2025年三级等保新规的核心变化,提供从零开始搭建企业安全防护体系的实战指南。重点介绍动态防护能力、实战化攻防验证和全链路数据保护等关键要求,并附完整配置清单,帮助企业高效合规。 阅读详情

相关推荐

Android音频输出流实战:从AudioFlinger到HAL层的完整调用链解析

本文深入解析了Android音频输出流的完整调用链,从应用层的AudioTrack和AAudio API,到系统服务AudioFlinger的混音调度,最终抵达硬件抽象层(HAL)。文章结合实战经验,探讨了如何利用底层机制优化音频延迟、处理设备切换,并提供了性能调优与问题排查的具体方法,是开发高性能音频应用的实用指南。

weixin_29208327的博客 252

jpa 使用原生sql 总结

jpa 的自定义sql SQL 使用的是@Query注解,进行编写查询,修改,删除,增加的sql 在**删除和修改,增加方法需要有@Modifying**注解.也可以根据需要添加 @Transactional对事物的支持,查询超时的设置等 @Modifying @Query("update User u set u.userName = ?1 where u.id = ?2") int modif...

溪 4868

跨模型的 API 调用与集成:使用 Spring AI 构建可移植的 API 代码,支持多个 AI 模型(如 OpenAI、Anthropic 等)的调用

Spring AI 是 Spring 生态系统中的一部分,旨在提供一种简单、可扩展的方式来集成人工智能模型。Spring AI 使得开发者可以使用现有的 Spring 体系结构方便地访问多种 AI 模型和服务,例如 OpenAI、Anthropic、HuggingFace 等。

秋元的博客 2405

JPA写原生SQL

JPA原生sql 代码示例 @Repository public interface ParticipantRepository extends JpaRepository<Participant,Long> { List<Participant> getByAppointmentId(Long appointmentId); int deleteByAppointmentId(Long appointmentId); Participant getB

qq_42026590的博客 1274

ESP32-S3 + TB6600驱动42步进电机:从基础接线到AccelStepper库平滑加减速实战

本文详细介绍了如何使用ESP32-S3开发板和TB6600驱动器控制42步进电机,从基础接线到利用AccelStepper库实现平滑加减速控制。内容涵盖硬件连接、基础驱动代码、AccelStepper库的安装与参数调优,以及高级技巧与故障排除,帮助创客实现工业级精准控制。

weixin_42632434的博客 287

从CCD数据上报看wxHOOK的封号风险与规避

本文深入分析了微信CCD数据上报机制对wxHOOK的检测逻辑与封号风险,揭示了调试器路径暴露、非白名单DLL加载和内存校验失败等关键风险点。通过实战案例和规避方案,帮助开发者理解如何安全使用wxHOOK技术,避免封号风险,包括内存镜像欺骗、内核级隐蔽和硬件辅助方案等高级技巧。

weixin_27875131的博客 634

jpa使用原生sql查询,或者使用Specification

使用这个的前提是: repository 继承 JpaSpecificationExecutor。三个判断条件写出来就解决了,所以这里记录一下如何适用 JPA 的原生 SQL。拼接 where mobile=“xxxxxx”有三个查询条件,如果适用 JPA 最常见的形式。如果采用最原生的 sql 哪一个筛选条件传值了。拼接 where endTime xxxxxx。拼接 where type = xxx。那么就拼接一下 sql 会方便很多。这样写出来的 原生SQL 是可以的。则需要加很多判断条件。

m0_56356631的博客 1488

鸿蒙平板PC应用开发:在termux中安装ubuntu

打开AVNC点击右上角的设置图标,然后点击 输入 , 点击手势栏目中的 单指轻扫 ,选择滚动远程内容

DMZDAMS的博客 5202

JPA原生sql多条件查询

【代码】JPA原生sql多条件查询。

IT的鱼 618

出现 Transaction rolled back because it has been marked as rollback-only 解决方法

出现 Transaction rolled back because it has been marked as rollback-only 解决方法

码农研究僧的博客 1万+

使用n8n搭建服务器监控系统:从Webhook到Telegram告警的完整实现

本文介绍基于n8n工作流平台搭建轻量级服务器监控系统的完整方案,通过Webhook接收监控数据、Token认证、阈值检查和Telegram告警推送,实现7x24小时自动化监控。整个系统由7个可视化节点组成,支持CPU、内存、磁盘、网络流量等多维度指标监控,告警阈值可灵活配置。相比传统的Prometheus或Zabbix方案,配置更简单、资源消耗更低,适合1-50台中小规模服务器的监控需求。实测表明从部署到上线仅需30分钟,告警响应延迟小于1秒,完全满足生产环境要求。

todoitbo的博客 1万+

原生的JPA-JPQL

在这个查询中,JOIN FETCH c.orders o将立即加载每个Customer的所有Order,而JOIN FETCH o.items i将立即加载每个Order的所有OrderItem。如果只是需要统计或聚合数据,而不是加载所有关联数据,可能不需要使用JOIN FETCH,而是考虑使用更简单的查询或SQL聚合函数。在数据量大时,应谨慎使用。通过使用JOIN FETCH,你可以在JPQL查询中控制何时加载关联的数据,这对于需要立即获取完整数据集的场景非常有用。使用JOIN FETCH加载关联数据。

存在,即合理 1534

YOLO11改进 - 卷积Conv | DEGConv(方向引导边缘门控卷积) : 空间分块、方向先验、轻量边缘增强

本文介绍了方向引导边缘门控卷积(DEGConv),一种专为增强边缘敏感度与方向感知能力设计的轻量级模块。该方法通过 Sobel 算子生成方向嵌入,结合条纹卷积提取水平与垂直边缘特征,并利用门控机制动态抑制背景噪声,从而精准捕捉细粒度结构。我们将 DEGConv 成功集成进 YOLO11,在 Backbone 的 SPPF 后及 Neck 的 P3、P4 分支中引入该模块以优化特征提取。实验证明,集成 DEGConv 的 YOLO11 在检测任务中表现优异,有效提升了模型对复杂边缘与方向特征的建模能力。

魔改工程师的博客 679

spring data jpa 会用的 原生sql 查询方式

目录 (1)按某个字段统计数据 (2)几个表组建视图查询 (1)按某个字段统计数据 这里是根据detectSn进行统计,并且过滤掉重复数据(DISTINCT),不需要过滤去掉DISTINCT就可以了。后面跟查询条件。 传的值在上面获取需要用 :value 参数需要价格@Param(“value”) ...

AmbroseLe 7091

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

jpa 原生sql 查询返回一个实体_使用 JPQL 和原生 SQL 查询 JPA 实体

示例应用程序本文讨论的代码段摘自本文随附的示例应用程序中使用的 Java 源文件。浏览一下示例存档,您可能会注意到,这是一个基于 Java Servlet 和 Java 持久性 API 技术的简单 Web 应用程序。为简单起见,它不使用企业 bean,而是直接从 servlet 内部发出 JPQL 查询。但是,这并不意味着您将不能在企业 bean 中利用这里讨论的 JPQL 查询 — 您可以在任何...

weixin_30222083的博客 831

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

使用play时使用JPA查询,还是原生SQL查询

是使用JPA查询好?还是自己写原生的SQL查询好?这是我最近一直在考虑的问题,值得探讨,目前尚无定论,只有一些感受,这个问题我将一直跟踪下去。 JPA查询明显有很多限制,这些限制给我的感觉是有点拘束,因为用它开发项目时,总是一个劲的遇到特殊的问题,让人很沮丧: (1)实体关联查询时,实体关联关系一定要建好,避免互相调用!在一个项目刚开始的时候,各种需求情况还不十分明朗,实体关联等功能可

浪漫鼠 1601

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Spring Hibernate JPA 利用原生sql联表查询

Spring Hibernate JPA 利用原生sql联表查询 测试类 代码片. @Test public void getDeviceStatusList() throws Exception { String tenantId = "1e88104b7aeab10b6debf3a73521807"; List&lt;Object[]&gt; list...

wenhui 的博客 1642

JPA查询--使用原生sql查询

1.如果sql 查询多个字段, query.getResultList() 返回List类型,每个对象类型是Obejct类型的数组。List<Object[]> import java.math.BigDecimal; import java.util.List; import javax.persistence.EntityManager; import javax....

dream_heheda的博客 1690

jpa原生query_JPA原生sql实现分页查询

JPA原生sql实现分页查询用jpa实现分页查询的时候显示错误:Cannotusenativequerieswithdynamicsortingand/orpaginationinmethodpublicabstractorg.springframework.data.domain.Page这句话的意思大概是不能用原生sql来动态的进行查询操作出了问题当然是要百度,辣鸡百...

weixin_39675289的博客 986

jpa 原生sql 查询返回一个实体_jpa用原生SQL查询数据库

一、提前准备有2张表student,和teacher表对应要联合查询的DTO实例,创建表SQL在上个博客页面里有, 数据内容如下:学生表student 老师表teacher 这里使用的SQL语句是:select a.id as id, a.name as studentName, b.name as teacherName, a.grade as grade, b.course as course...

weixin_42612804的博客 1296

Spring Data JPA 进阶(自定义查询,原生 SQL 查询)

自定义查询语句(JPQL) 使用@Query 自定义查询 // 根据学生姓名查询学生记录 Student是实体类的名称 @Query("select s from Student s where s.name=?1") List<Student> getStudentName(String name); 在controller中调用 /** * 根据学生姓名查询学生记录 http://localhost:8080/getStuName?name=张三 * * @param s

chaotiantian的博客 1万+

JPA的查询语言—使用原生SQL

ntityManager API 提供了创建 Query 实例以执行原生 SQL 语句的createNativeQuery方法。   实体User: [java] view plain copy package com.cndatacom.jpa.entity;       import javax.persistence.Column;   import java

maguanghui_2012的专栏 3063

完美的 jpa 多表 原生sql 分页查询

多表分页查询,强烈推荐原生sql 一般需要两个方法,一个查条数,一个查当前页数据 Page 使用spring 的page 类 @Query(value = "" + "" + " select " + "a.id," + "a.title," + "a.article...

David的博客 5544

Spring Data Jpa 进行原生Sql 分页和条件查询

因为业务的原因今天写了一个原生的Spring Data jpa的分页查询 : 1 .进行封装自己PageQuery: public class PageQuery { public Integer getPage() { return page - 1; } public void setPage(Integer page) { ...

折腾java的博客 9627

Spring Data JPA使用JPQL与原生SQL进行查询

1、使用JPQL语句进行查询 JPQL是面向对象进行查询的语言,可以通过自定义的JPQL完成UPDATE和DELETE操作。JPQL不支持使用INSERT。对于UPDATE或DELETE操作,必须使用注解 @Modifying 进行修饰。 package com.pjb.jpauserdemo.dao; import com.pjb.jpauserdemo.entity.UserInfo; import org.springframework.data.jpa.repository.JpaReposit

weixin_46183674的博客 659

Spring Data JPA 调用原生(Native) SQL 查询

本文使用了 SpringBoot 中的 spring-boot-starter-data-jpa 模块来加入 JPA 功能,单独使用 Spring Data JPA 可能有差异,JDK 版本为 8 介绍 Spring Data JPA 是 Spring Data 项目众多子项目中的一个,是对 Java JPA 规范扩展,本身使用了 Hibernate 的 JPA 实现,并提供了更丰富的 AP...

浅尚湖间 4699
上一篇: JPA下的原生sql查询
下一篇: Ajax方式上传文件
coding_1994
博客等级 码龄9年 636粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值