JPA下的原生sql查询

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

private @Autowired EntityManager em;
//private @PersistenceContext EntityManager defaultEm;
@SuppressWarnings("unchecked")
public List<Book> findByName1(String bookName, String expressName) {
    String sql = "select * from t_book b left join t_express e on b.exp_id = e.id where "
            + "b.name like '" + bookName + "' and e.name like '" + expressName +"'";
    Query query = em.createNativeQuery(sql, Book.class);
    //query 有executeUpdate、getFirstResult等方法,可以根据sql调用
    List<Book> bookList = query.getResultList();
    return bookList;
}
//@Query(value="select * from t_book b left join t_express e on b.exp_id = e.id where "
//            + "b.name like ?1 and e.name like ?2", nativeQuery=true)
//List<Book> findByName(String bookName, String expressName);    
public List<Book> findByName2(String bookName, String expressName) {
    return this.repository.findByName(bookName, expressName);
}
 
@SuppressWarnings("unchecked")
public List<BookExpress> findBookExpress1(String bookName, String expressName) {
    String sql = "select b.id as bookId,b.name as bookName, e.id as expressId, e.name as expressName from t_book b left join t_express e "
            + "on b.exp_id = e.id where b.name like '" + bookName + "' and e.name like '" + expressName +"'";
    //如果不设置自定义的ResultTransformer转换器,则Hibernate将每行返回结果的数据按照结果列的顺序装入Object数组中。
    //关联表映射的时候,每个字段都需要addScalar
    Query query = em.createNativeQuery(sql);
    List<BookExpress> result = query.unwrap(SQLQuery.class)
            .addScalar("bookId", LongType.INSTANCE).addScalar("bookName").addScalar("expressId", LongType.INSTANCE).addScalar("expressName")
            .setResultTransformer(Transformers.aliasToBean(BookExpress.class)).list();
    return result;
}
 
//注意sql里边的双引号转义
@SuppressWarnings("unchecked")
public List<BookExpress> findBookExpress2(String bookName, String expressName) throws IllegalAccessException, InvocationTargetException {
    String sql = "select b.id as \"bookId\",b.name as \"bookName\", e.id as \"expressId\", e.name as \"expressName\" from t_book b left join t_express e "
            + "on b.exp_id = e.id where b.name like '" + bookName + "' and e.name like '" + expressName +"'";
    Query query = em.createNativeQuery(sql);
    List<Map<String, Object>> resultList = query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
    if(CollectionUtils.isEmpty(resultList)) {
        return null;
    }
    List<BookExpress> result = new ArrayList<>(resultList.size());
    for(Map<String,Object> map : resultList) {
        BookExpress exp = new BookExpress();
        BeanUtils.populate(exp, map);
        result.add(exp);
    }
    return result;
}
//getDelegate不用事务就能获取到session,但是dowork查询的时候为什么报错(org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl@10cf3d8 is closed)
public List<BookExpress> findBookExpress3(String bookName, String expressName) {
    Session session = (Session)em.getDelegate();//为什么getDelegate不需要事物,unwrap需要事务
    //Session session = em.unwrap(Session.class);
    BookExpressQueryWork1 bookExpressQueryWork = new BookExpressQueryWork1();
    bookExpressQueryWork.setBookName(bookName);
    bookExpressQueryWork.setExpressName(expressName);
    
    session.doWork(bookExpressQueryWork);
    session.disconnect();
    return bookExpressQueryWork.getBookExpresses();
}

Unity 升级 xLua 版本,编译不同平台链接库 Unity 升级 xLua 详解 阅读详情

相关推荐

python 写一个简单的 telegram bot (电报机器人)

replit.com 环境配置太恶心了,只能使用 poetry.poetry 这个名字是挺好听,用起来也是很垃圾,太恶心。heroku.com 注册登录不方便,需要各种验证。所以,部署的问题,目前搁置。

waterHBO的博客 3198

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

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

m0_56356631的博客 1488

【网络】Ikuai中如何添加/更换虚拟机(图文)

Ikuai 添加虚拟机教程

qq_20623849的博客 6541

JPA原生sql多条件查询

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

IT的鱼 618

绝缘体上硅(SOI) vs 传统硅片:5个关键性能对比及适用场景分析

本文深入对比了绝缘体上硅(SOI)与传统硅片在功耗、速度、隔离性等5个关键性能维度的差异,并分析了各自适用场景。SOI技术凭借其独特的埋氧层结构,在低功耗、高频应用和极端环境下展现出显著优势,特别适合移动设备、汽车电子和航天应用。

weixin_30335575的博客 555

MaPLe: Multi-modal Prompt Learning

具体而言,我们在语言分支中附加可学习的上下文标记,并通过耦合函数显式地将视觉 Prompt 置于语言 Prompt 上,以建立它们之间的交互。使用 Prompt 来适应CLIP (语言或视觉) 的单个分支中的表示是次优的,因为它不允许在下游任务上动态调整两个表示空间的灵活性。由此,提出了一种分支感知的多模态 Prompt,通过在两种模态之间共享提示来协调 CLIP 的视觉和语言分支。在 Prompt Tuning 中,必须采取多模态方法获得同时适应 CLIP 的视觉和语言分支,以实现上下文优化的完整性。

weixin_48907099的博客 1054

原生的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

KiCad 7.0 + 嘉立创打样:从原理图到实物,打造你的双LLCC68 LoRa串口透传板

本文详细介绍了使用KiCad 7.0设计双LLCC68 LoRa串口透传板的完整流程,从原理图设计到嘉立创打样。重点解析了AVR+LLCC68组合的优势、双模块布局的电磁兼容设计、SPI接口配置及射频走线技巧,并提供了实测数据和常见问题解决方案,帮助开发者高效实现物联网设备的低功耗远距离通信。

weixin_28693447的博客 262

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

1、使用JPQL语句进行查询 JPQL语言(Java Persistence Query Language)是一种和SQL非常类似的中间性和对象化查询语言,它最终会被编译成针对不同底层数据库的SQL语言,从而屏蔽不同数据库的差异。 JPQL语言通过Query接口封装执行,Query 接口封装了执行数据库查询的相关方法。调用 EntityManager 的 Query、NamedQuery 及 ...

pan_junbiao的博客 6168

SXU—软件测试方法和技术-朱少民-第三部分 软件测试方法大题汇总-附考点和相关习题及解答

软件测试方法和技术-朱少民-第三部分 软件测试方法—-最少测试用例个数,强一般弱一般强健壮、边界值分析、ns流程图、白盒逻辑覆盖代码、等价类划分,逻辑组合(条件)覆盖,计算圈复杂度等—附考点和相关习题及解答

weixin_63597914的博客 2213

GPU硬件架构与微架构深度解析09-GPU寄存器文件深度解析

本文探讨GPU架构中大规模寄存器堆的设计与高效分配算法。寄存器文件作为GPU关键组件,支持大规模线程并行和快速数据存取。文章分析了多体寄存器堆的设计考量,包括端口数量、冲突避免和功耗管理,并比较了线性扫描、图着色等寄存器分配算法的特点。还介绍了寄存器压缩、动态分区等高级优化技术,以及NVIDIA Ampere架构的实际案例。这些技术对提升GPU计算性能和能效至关重要。

2301_79143213的博客 121

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

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

AmbroseLe 7091

液压轴位置闭环控制(比例伺服阀应用)

液压阀的基础知识请参看下面的博客文章:PLC液压控制系列之比例流量阀结构分析_RXXW_Dor的博客-优快云博客比例流量阀液压同步控制的PID闭环调节可以参看下面这篇博文三菱FX3U-PLC 前馈+PID闭环调节实现液压同步控制(比例换向阀)_RXXW_Dor的博客-优快云博客液压控制系统在工业现场应用非常广泛,这篇博文我们简单分析下液压同步控制。这套系统的液压缸为单液压缸,首先简单介绍下什么是单作用液压缸,液压系统的详细理论分析大家可以找些专业书籍学习。

RXXW_Dor的博客 2267

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

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

weixin_30222083的博客 831

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Statistics and Machine Learning Toolbox

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

JPA原生sql查询

EntityManager API 提供了创建 Query 实例以执行原生 SQL 语句的createNativeQuery方法。   实体User: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2

opera95的博客 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

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

浪漫鼠 1601

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
上一篇: JPA @Id 和 @GeneratedValue 注解详解
下一篇: JPA原生sql查询
coding_1994
博客等级 码龄9年 636粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值