3.3.1 查询——JPQL/HQL

Java JPQL基础:Java Persistence Query Language入门 JPQL是一种强大的面向对象查询语言,专为JPA框架设计。它允许开发者通过面向对象的方式检索实体数据,而无需关心底层数据库的具体实现。与传统SQL不同,JPQL直接操作Java实体类及其属性,而非数据库表和列。这种抽象层使开发者能够编写与数据库无关的查询,增强了应用程序的可移植性。JPQL查询会被JPA提供者转换为针对特定数据库的SQL语句执行,从而实现了对象关系映射(ORM)框架的核心功能。/*** 基本的JPQL查询示例*/// 创建JPQL查询语句 - 注意这里使用的是实体名而非表名。 阅读详情

Hibernate查询语言(HQL)和Java Persistence查询语言(JPQL)都是对象模型,它们都将查询语言与SQL类似。JPQL是HQL的子集。JPQL查询始终是一个有效的HQL查询,但反过来则不一定成立。

HQL和JPQL都是非类型安全的执行查询操作的方法。Criteria查询提供了一种类型安全的查询方法

1、JPA Query

通过EntityManager取得javax.persistence.Query 或javax.persistence.TypedQuery。

主要接口

Query : 基本的查询对象

TypedQuery : Query的子接口,类型化的查询对象,支持泛型,推荐使用类型化查询

JPQL/HQL

from子句:from 后面可以直接跟着类名,别名不是必须的,where语句就必须在from的后面。

Select子句:查询一个实体对象的时候,不需要select子句

select 别名 from 类名 别名 where 条件

select 别名.属性 from 类名 别名 where 条件

(1)基本查询

Query query = super.entityManager.createQuery("from ArticleType");
List<?> list = query.getResultList();//获取查询结果集合

(2)带参数的查询

  在JPQL/HQL里面,参数如果是 : 开头的 表示【命名参数】,不能用【数字】给参数赋值,而是要使用名字
  如果就是要使用数字来设置参数,则把命名参数改为 ?


(3)使用构造器查询

select new 类名(别名.属性,别名.属性) from类名别名

构造器的这种查询使用较少,把查询出来的部分属性,通过类的构造器传入给对象,创建类名对应的对象。

构造器必须要有【无参构造器】,否则其他创建对象,存储对象到数据库的语句会出问题。以及select的时候new所需要的匹配构造器!

有多个User类的情况下应写全限定类名。


2、Hibernate Query

通过 Session 获取 org.hibernate.query.Query。

除了创建Query对象以及取得结果与JPA不一样,其余设置参数一致

org.hibernate.query.Query query = session.createQuery(...);

3、函数

聚集函数(Aggregate)
count
min
max
sum
avg

标量函数
Concat 字符串连接
SUBSTRING 截取字符串
UPPER 转换为大写
LOWER 转换为小写
TRIM 去掉头尾空格
LENGTH 属性内容的长度
LOCATE 接收两个参数,定位第一个参数的内容,在第二个参数的位置,类似于String里面的indexOf方法。
ABS 绝对值
MOD 求余
SQRT 平方根
CURRENT_DATE 当前日期,没有时分秒
CURRENT_TIME 当前时间,没有年月日
CURRENT_TIMESTAMP 当前日期、时间


注意:虽然HQL/JPQL大部分的函数、查询方式,都跟SQL差不多,只是在HQL/JPQL里面不能使用数据库的字段,只能使用类里面的【属性名】。

eg:

String hql = "select sum(o.number) from OrderItem o where o.order=:order";

String hql = "select size(o.items) from Order o where o.id=:id";

String hql = "select MAXELEMENT(o.items) from Order o where o.id=:id";

4、本地的SQL语句(Native SQL Queries)

不推荐使用。查询结果默认是Object[],可以通过addScalar指定不同的列,返回特定的数据类型。


HQL(JPQL)和原生SQL实现查询自定义返回类 方法来限制查询结果的数量;或者使用JPQL的分页功能来实现相同的效果,可以定义一个返回。如果需要为了实现类似的功能,可以使用JPQL的。的方法,并在调用时设置分页参数;关键字,可以在某些数据库中使用。 阅读详情

相关推荐

JPQL查询语言入门指南

首先,我们需要定义一个实体类。以下是一个Employee@Entity@Id// 省略其他字段和方法。

m0_62153576的博客 555

JPQL详解

前提 最近在改bug的时候发现了自己的缺点,在改前端bug的时候非常顺利顺手。但是在改后端bug的时候如果遇到不是太难的问题还可以解决,但是一到难点感觉自己就懵逼! 所以讲解了关于JPQl相关内容 JPA 在说jpql之前必须要说一下什么是JPA,否则在后续学习的时候,你会弄混的。JPA是一种规范,什么是规范呢,规范就是一个钥匙可以开这把锁。一般对于规范来说我们都是用接口,如果有人要...

Judy-命中注定与众不同 2万+

JPQL查询实践:从基础到进阶

首先,我们定义一个简单的实体类Employee,用于表示员工信息。@Entity@Id// 省略构造方法、getter和setter方法等。

m0_62153576的博客 467

JPQL(JPA的查询语句)

一JPQL和SQL 1.JPQL和SQL很像,查询关键字都是一样的 2.唯一的区别是:JPQL是面向对象的 二、JPQL书写规则 JPA的查询语言,类似于sql 1.里面不能出现表名,列名,只能出现java的类名,属性名,区分大小写 2.出现的sql关键字是一样的意思,关键字不区分大小写 3.不能写select * 要写select 别名 三、JPQL的简单查询 package cn.it...

Yuncoco的博客 2万+

VXLAN技术详解

VXLAN(虚拟可扩展局域网)是一种Overlay二层虚拟化技术,通过MAC-in-UDP封装在IP网络上构建大规模虚拟二层网络。核心组件包括VTEP(隧道端点)、24位VNI(支持1600万个虚拟网络)和VXLAN网关。相比VLAN,VXLAN具有超大规模扩展、跨三层互联、支持虚拟机无缝迁移等优势,适用于云数据中心多租户隔离、跨数据中心互联等场景。其基于IP路由的封装方式无需改造物理网络,为现代云网络提供了弹性、安全的虚拟化解决方案。

kjkdd的博客 594

python电子学会三级的零碎笔记

‌示例‌:如果s = ['a', 'b', 'c'],则' '.join(s)+'\n'的结果是'a b c\n',写入文件时所有元素会在一行内显示,每个元素之间用空格分隔,末尾有一个换行符。(2) '\n'.join(s)‌:如果s = ['a', 'b', 'c'],则'\n'.join(s)的结果是'a\nb\nc',写入文件时每个元素会占据文件的一行。(1) ' '.join(s)+'\n'‌:这种方式首先将列表s中的每个元素通过空格连接成一个字符串,然后在字符串末尾添加一个换行符\n。

xzal12的博客 690

JPQL(JPA Query Language) 和 HQL(Hibernate Query Language) 的核心差异对比

JPQL(JPA Query Language) 和 HQL(Hibernate Query Language) 的核心差异对比

爱的叹息的专栏 671

centos7 清理缓存

一、系统环境 系统版本 CentOS Linux release 7.3.1611 (Core) 内核版本 Linux xx-user 3.10.0-514.el7.x86_64 #1 SMP 背景 服务器分配的账号是普通用户,只能执行sudo命令 二、缓存查看及基本概念 查看内存使用情况 [user01@xx-user ~]$ free -h total used free shared buff/cache availabl

sunzq55的博客 4004

sql,hql,jpql(ejb)介绍

转自:http://blog.sina.com.cn/s/blog_671b8b5b0100lxy2.html(比较早的blog,仅供参考) sql是关系数据库查询语言,面对的数据库;而hql是Hibernate这样的数据库持久化框架提供的内置查询语言,虽然他们的目的都是为了从数据库查询需要的数据,但sql操作的是数据库表和字段,而作为面向对象的hql操作的则是持久化类及其属性 jpql 基

wmz831的专栏 1582

Python-OPCUA 实现西门子PLC数据批量读写与自动化监控

本文详细介绍了如何使用Python结合OPC UA协议,实现对西门子PLC数据的批量读写与自动化监控。通过搭建开发环境、利用KEPserverEX作为通信桥梁,并配合Python代码实战,读者可以掌握高效的数据采集、批量写入以及构建带报警功能的监控系统的方法,从而大幅提升工业自动化场景下的数据处理效率和系统灵活性。

www00的博客 181

不到200块!手把手教你用ZYNQ7010和AD9363攒一台自己的开源SDR硬件(附BOM清单)

本文详细介绍了如何用不到200元的预算,基于ZYNQ7010 FPGA和AD9363射频芯片打造一台功能完备的开源SDR硬件平台。从核心组件选型、PCB设计到焊接调试,提供全流程实战指南,特别适合预算有限的硬件爱好者和创客群体探索无线通信世界。

weixin_26854829的博客 479

Spring Boot 3.x中Hibernate 6.x JPQL/HQL语法变化详解与解决方案

本文详细介绍了Spring Boot 3.x中Hibernate 6.x的JPQL/HQL语法重大变化及解决方案。主要内容包括:1)核心语法变化,如子查询别名作用域规则调整、隐式连接需改为显式JOIN、函数参数类型更严格等;2)依赖配置检查,需确认Hibernate 6.x版本及正确方言配置;3)提供语法迁移适配方案,帮助开发者平滑过渡。文章通过代码示例对比新旧语法差异,并给出具体修改建议,是升级到Hibernate 6.x的实用参考指南。

深山技术宅的博客 883

主流算力卡性能对比分析

超大规模AI训练/HPC:优先选择NVIDIA H100或AMD MI300X,需关注显存带宽和多卡互联能力。企业级AI训练:NVIDIA A100性价比更高,生态成熟。国内自主可控需求:华为昇腾910B是首选,支持液冷和低功耗设计。本地AI推理/游戏:NVIDIA RTX 4090或RTX 5090性价比突出,但需注意显存容量限制。边缘计算/低功耗场景:华为昇腾310或清微智能TX536(能效比6.3TOPS/W@INT8)更合适。

m0_69867914的博客 7796

Atitit oodbms的查询,面向对象的sql查询jpa jpql hql

Atitit oodbms的查询,面向对象的sql查询jpa jpql hql   1.1. 标准API历史1 1.2. JPA定义了独特的JPQL(Java Persistence Query Language) 可媲美JDBC的查询能力  1 1.3. 操作api1 1.4. Hql2   1.1. 标准API历史 该标准被纳入因此标准的每一步中JPA的规范通知所有版本

attilax的专栏 602

STM32F4 Flash数据的保存和读取。

STM32F4 Flash数据的保存和读取。

张一西的博客 9216

5.4 GTT BO的内存分配分析

本文分析了AMD GPU驱动中的GTT技术实现。GTT作为GPU页表,负责管理主机内存与GPU虚拟地址的映射,支持大容量内存访问和统一寻址。文章详细介绍了GTT的核心数据结构amdgpu_gtt_mgr、初始化流程,以及BO(Buffer Object)创建时GTT区间的分配与释放机制。GTT管理通过TTM框架实现分层设计,提供内存统计、兼容性检查等接口,并支持动态迁移、多进程隔离等高级特性。该机制为AMD GPU提供了高效灵活的内存管理基础。

图形/计算GPU的驱动与虚拟化技术分享园地 3728

HQL、JPQL、SQL、CQL各自区别

1、HQL(Hibernate Query Language)是面向对象的查询,from后面跟的是“表名”,where后用“表中字段”做条件。在Hibernate中使用查询时,一般用HQL查询语句。因为HQL是面向对象的,而对象类的名称和属性都是大小写敏感的,所以是大小写敏感的。 2、JPQL(Java Presistence Query Language )是EJB3.0中的JPA...

weixin_34293141的博客 629

android 蓝牙通讯demo

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

JPA和Hibernate-条件与JPQL或HQL

What are the pros and cons of using Criteria or HQL ? 使用Criteria或HQL有什么利弊? The Criteria API is a ni

p15097962069的博客 489

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SQL HQL JPQL CQL

参考网址:http://www.mamicode.com/info-detail-2297420.htmlSQL(Structured Query Language)是关系数据库查询语言。from后面跟的是“表名”,where后用“表中字段”做条件 HQL(Hibernate Query Language)是面向对象的查询,from后面跟的是“表名”,where后用“表中字段”做条件。在Hibe...

weixin_30929295的博客 189

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

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

SQL,HQL,CQL,JPQL了解

SQL(Structured Query Language)     是关系数据库查询语言。from后面跟的是“表名”,where后用“表中字段”做条件 HQL(Hibernate Query Language)     是面向对象的查询,from后面跟的是“表名”,where后用“表中字段”做条件。在Hibernate中使用查询时,    一般用HQL查询语...

weixin_30383279的博客 156

SQL HQL JPQL CQL的对比

sql(Structured Query Language)是关系数据库查询语言,面对的数据库;而hql是Hibernate这样的数据库持久化框架提供的内置查询语言,虽然他们的目的都是为了从数据库查询需要的数据,但sql操作的是数据库表和字段,而作为面向对象的hql操作的则是持久化类及其属性,SQL是关系数据库查询语言。from后面跟的是“表名”,where后用“表中字段”做条件 JPQL(Ja...

weixin_30344795的博客 137

SQL、HQL、JPQL、CQL的区别

SQL(Structured Query Language)是关系数据库查询语言。from后面跟的是“表名”,where后用“表中字段”做条件 HQL(Hibernate Query Language)是面向对象的查询,from后面跟的是“表名”,where后用“表中字段”做条件。在Hibernate中使用查询时,一般用HQL查询语句。因为HQL是面向对象的,而对象类的名称和属性都是大小写敏感的...

weixin_30687587的博客 142

JPQL 的基本使用

一、概念 JPQL 语言,即 Java Persistence Query Language 的简称。JPQL 和 HQL 是非常类似的,支持以面向对象的方式来写 SQL 语句,当然也支持本地的 SQL 语句。JPQL 最终会被编译成针对不同底层数据库的 SQL 查询从而屏蔽掉不同数据库的差异。 1、API javax.persistence.Query 接口封装了执行数据查询的相关方法。主要方法...

weixin_30396699的博客 250
上一篇: 3.2 Hibernate-Inheritance
下一篇: 3.3.2 查询——Criteria
ack_Finding
博客等级 码龄10年 6粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值