首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JPA之使用JPQL语句进行增删改查

JPA之使用JPQL语句进行增删改查

作者头像
企鹅号小编
发布于 2018-01-29 06:18:30
发布于 2018-01-29 06:18:30
2K0
举报
文章被收录于专栏:数据库数据库

JPA支持两种表达查询的方法来检索实体和来自数据库的其他持久化数据:查询语句(Java Persistence Query Language,JPQL)和条件API(criteria API)。JPQL是独立于数据库的查询语句,其用于操作逻辑上的实体模型而非物理的数据模型。条件API是根据实体模型构建查询条件

1.Java持久化查询语句入门

1.这个查询语句类似于SQL。但它与真正的SQL的区别是,它不是从一个表中进行选择查询,而是指定来自应用程序域模型的实体。

2.查询select子句也只是列出了查询实体的别名,如果只查询某一列的,可以使用点(.)操作符进行来导航实体属性。如下所示:

1.1.筛选条件

像SQL一样,JPQL也支持where子句,用于对搜索的条件过滤。包括大多数的操作符,如:in,between、like以及函数表达式substring、length等等

1.2.投影结果

对于查询的数据量比较大的话,可以使用投影的方式,只查询出有用的列。

1.3.聚合查询

JPQL的聚合查询语法类似于SQL。例如count

1.4.查询参数

JPQL支持两种类型的参数绑定语法。

1.位置参数表示法

其中参数是在查询字符串中指示,该字符串是在一个问号(?)之后紧随参数的编号。当执行查询的时候,开发人员指定应该替换的参数编

2.命名参数表示法

通过在一个冒号(:)之后紧随参数名称,在查询字符串对它进行指示,当执行查询的时候,开发人员指定应该替换的参数名称

2.定义查询

JPA提供Query和TypedQuery(JPA 2.0引入)接口来配置和执行查询。Query的返回的Object类型,而TypedQuery返回的是指定的Class类型。

2.1.动态查询定义

JPA查询引擎,可以将JPQL字符串解析成语法树,获取表达式中的实体对象-关系映射的元数据,然后生成等价的SQL。故有两种方式进行动态查询。

1.拼接字符串方式

Tip:会引起SQL注入问题

2.动态参数化构建查询条件(推荐使用)

2.2.命名查询定义

命名查询是一个强大的工具。使用@NamedQuery注解定义一个命名查询,可以把它放在任何实体的类定义之上。该注解定义了查询的名称,及其查询的文本。

Tip:命名查询通畅放置在对应查询结果的实体类上

Tip:NamedQuery里面定义的名称在整个持久化单元中需要唯一,不然运行会出错。

eg:

调用

如果一个类定义两个或者以上个的命名查询,那么必须把它放置在@NamedQueries()

2.3.绑定参数

通过前面的例子,我们可以看到绑定参数有两种方式:1.位置参数化绑定。2.命名参数化绑定。都是通过Query接口的setParameter方法进行绑定。

1.位置参数化

2.命名参数化

第一种位置参数化绑定,如果位置发生变化都需要改变绑定的代码。推荐使用第二种。

2.4.执行查询

Query接口与TypedQuery接口提供了三种不同的方式执行查询。

1.executeUpdate

用来执行批量更新或者删除

2.getSingleResult

获取单个结果集。如果没有获取到数据,则会抛出NoResultException异常。如果获取多条数据的话,则会抛出NonUniqueResultException异常

3.getResultList

获取对应的结果集合,指定顺序的集合,需要使用List作为返回值类型。如果没有获取到数据的话,则返回一个空集合,不会抛出异常

2.5.分页

通过setFirstResult()setMaxResults()方法可以完成分页的查询

查询页码为0,每页展示2条数据

Tip:不能用于通过集合关系连接的查询,因为这些查询可能返回重复的值。

2.6.查询超时

2.7.批量更新和删除

批量更新实体是通过update语句完成。批量删除实体是通过delete语句完成。两者皆指定的是实体及其类的属性。

3.使用JPQL查询的建议

在应用系统中,通常使用查询的次数要比增加、修改、删除要多。故合理的使用查询显的尤为重要。

1.建议采用命名查询(NamedQuery)

持久化提供的程序通常会采用预编译的方式将命名查询作为程序初始化阶段的一部分。这样就避免了连续解析JPQL和生成SQL的系统开销。

2.大数量优先使用投影方式检索少量的列

jpa查询通常返回的是整个实体的所有列,但是对于庞大的数据量而言,并不是所有的实体列都需要用到。那么我们可以使用投影的方式来处理。

本文来自企鹅号 - Java从零入门系列媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - Java从零入门系列媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
(四)JPA - JQPL 实现增删改查
用户7630333
2023/12/07
6670
(四)JPA - JQPL 实现增删改查
快速学习-使用JPA完成增删改查操作
基于首次在EJB2.0中引入的EJB查询语言(EJB QL),Java持久化查询语言(JPQL)是一种可移植的查询语言,旨在以面向对象表达式语言的表达式,将SQL语法和简单查询语义绑定在一起·使用这种语言编写的查询是可移植的,可以被编译成所有主流数据库服务器上的SQL。
cwl_java
2020/04/01
8770
Spring-data-JPA详细介绍,增删改查实现「建议收藏」
本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求。这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring整合的环境中实现。如果需要了解该框架的入门,百度一下,很多入门的介绍。在这篇文章的接下来一篇,会有一个系列来讲解mybatis,这个系列从mybatis的入门开始,到基本使用,和spring整合,和第三方插件整合,缓存,插件,最后会持续到mybatis的架构,源码解释,重点会介绍几个重要的设计模式,这样一个体系。基本上讲完之后,mybatis在你面前就没有了秘密,你能解决mybatis的几乎所有问题,并且在开发过程中相当的方便,驾轻就熟。
全栈程序员站长
2022/06/26
3.9K0
Spring-data-JPA详细介绍,增删改查实现「建议收藏」
JPA基础增删改查方法命名规则
JPA 提供了一种基于方法命名的查询语法,可以根据方法的命名来自动生成查询。这种命名规则被称为 JPA 方法命名语法规则。以下是 JPA 方法命名语法规则的常见规范:
关忆北.
2023/10/11
1.3K0
SpringBoot教程(十二) | SpringBoot集成JPA
JPA顾名思义就是Java Persistence API的意思,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
一缕82年的清风
2022/04/08
4.9K0
SpringBoot教程(十二) | SpringBoot集成JPA
Java一分钟之-JPA查询:JPQL与Criteria API
在Java Persistence API (JPA)的世界里,查询数据库是日常开发的重要一环。JPA提供了两种主要的查询方式:Java Persistence Query Language (JPQL) 和 Criteria API。这两种方式各有千秋,适用于不同的场景和需求。本文将深入浅出地探讨JPQL与Criteria API的使用、常见问题、易错点及避免策略,并附上代码示例。
Jimaks
2024/06/15
9550
Java一分钟之-JPA查询:JPQL与Criteria API
jpa实现增删改查_hibernate入门案例
ORM(Object Relational Mapping),对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
全栈程序员站长
2022/11/01
2.1K0
jpa实现增删改查_hibernate入门案例
放弃 MyBatis、JPA,我最终选择了 JDBC Template!真香!!
作者:scherman 来源:segmentfault.com/a/1190000018472572
Java技术栈
2021/11/12
3.8K0
Spring-Data-Jpa基础用法
JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,TopLink,JDO等ORM框架各自为营的局面。值得注意的是,JPA是在充分吸收了现有Hibernate,TopLink,JDO等ORM框架的基础上发展而来的,具有易于使用,伸缩性强等优点。从目前的开发社区的反应上看,JPA受到了极大的支持和赞扬,其中就包括了Spring与EJB3.0的开发团队
leobhao
2022/06/28
8740
Spring-Data-Jpa基础用法
深入理解JPA
Java Persistence API(JPA)是Java平台上的一套ORM(对象关系映射)规范,它为Java应用提供了与数据库交互的标准方式。JPA的设计目标是简化开发者对数据库的访问,提高持久化层的灵活性和可维护性。本文将深入介绍JPA的基本概念以及在Java应用中的应用场景。
GeekLiHua
2025/01/21
3130
spring boot 中使用 jpa以及jpa介绍
最近在项目中使用了一下jpa,发现还是挺好用的。这里就来讲一下jpa以及在spring boot中的使用。 在这里我们先来了解一下jpa。
全栈程序员站长
2022/07/22
5.1K0
spring boot 中使用 jpa以及jpa介绍
10 个影响程序性能的Hibernate 错误,学会让你少走弯路
我在很多应用程序中修复过性能问题,其中大部分都是由同样的错误引起的。修复之后,性能变得更溜,而且其中的大部分问题都很简单。所以,如果你想改进应用程序,那么可能也是小菜一碟。
用户1289394
2018/10/25
2.4K0
10 个影响程序性能的Hibernate 错误,学会让你少走弯路
JPA与Hibernate区别 - JPQL查询优化,结合实际项目中的应用
Java Persistence API(JPA)和Hibernate是两个常用的持久化框架,它们都提供了一种强大的查询语言——JPQL(Java Persistence Query Language)。在大型应用中,高效的查询是保证性能的关键。本文将探讨JPA与Hibernate在JPQL查询优化方面的区别,并结合一个实际项目中的应用场景,介绍如何优化JPQL查询以提升性能。
王也518
2023/12/21
5620
浅谈JPA优缺点_sql优点
一.JPA的理解 JPA的总体思想和现有hibernate、TopLink,JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:
全栈程序员站长
2022/11/01
2K0
浅谈JPA优缺点_sql优点
SpringBoot中JPA的基本使用
JPA(Java Persistence API)是Java的持久化API,用于对象的持久化。它是一个非常强大的ORM持久化的解决方案,免去了使用JDBCTemplate 开发的编写脚本工作。JPA通过简单约定好接口方法的规则自动生成相应的 JPQL 语句,然后映射成 POJO 对象。
砒霜拌辣椒
2023/08/23
1.7K0
SpringBoot中JPA的基本使用
Spring Data JPA 参考文档四
原标题:Spring认证|Spring Data JPA 参考文档四(内容来源:Spring中国教育管理中心)
IT胶囊
2021/10/19
3.9K0
Spring Data JPA 参考文档四
SpringDataJpa
SpringData JPA只是SpringData中的一个子模块 JPA是一套标准接口,而Hibernate是JPA的实现 SpringData JPA 底层默认实现是使用Hibernate SpringDataJPA 的首个接口就是Repository,它是一个标记接口。只要我们的接口实现这个接口,那么我们就相当于在使用SpringDataJPA了。 只要我们实现了这个接口,我们就可以使用”按照方法命名规则”来进行查询。
全栈程序员站长
2022/08/04
1.3K0
SpringDataJpa
一篇 JPA 总结
下面是 JDBC 在 Java 应用和数据库之间的位置,充当着一个中间者,供 Java 应用程序访问所有类别的数据库,建立一个标准
bgZyy
2018/08/01
6.1K0
一篇 JPA  总结
Spring Boot – JPA配置使用[通俗易懂]
执行insert方法,可以看到console面板输出sql语句;查看数据库,能看到表已经被创建,同时插入了一条信息
全栈程序员站长
2022/07/21
2.2K0
Spring Boot – JPA配置使用[通俗易懂]
ORM和 Spring Data Jpa
什么是“持久化” 持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。
chenchenchen
2019/09/02
3.9K0
ORM和 Spring Data Jpa
相关推荐
(四)JPA - JQPL 实现增删改查
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档