JPA(4) JPQL一些简单的查询语法

article/2025/10/13 20:48:51

JPQL --> JPA Query Language --> JPA的查询语句    (另外HQL:Hibernate的查询语句)
JPQL本质:JPA通过antlr-2.7.7.jar将JPQL编译成sql并且封装执行的。  
JPQL和SQL区别??               -->  它们查询的关键字都是一样的,但JPQL是面向对象的(JPQL只能写java的类名和属性名)

JPQL书写规则

JPA的查询语言,类似于sql
   ①里面不能出现表名,列名,只能出现java的类名,属性名,区分大小写
   ②出现的sql关键字是一样的意思,不区分大小写
   ③不能写select *  要写select 别名

JPQL查询语法:    ---(面向对象)

查询所有用户【查询实体类型】:

"select o from User o"   --> User:类名  o:别名

查询所有用户的姓名和所属部门名称 【查询特定属性】

方式①:"select o.name,o.department.name from User o"  
      注意:此时接收数据 类型用Object[]数组   --(涉及到查询出多个类里面数据的时候一般都需要使用Object[]数组接收数据!) 
        ex:List<Object[]> resultList = query.getResultList();
方式②(new一个构造器):"select new User(o.name,o.department.name) from User o"  
     注意:此时User类里面需要加无参构造和下面
     public User(String name, String departmentName) {
            this.name = name;
            this.department = new Department();
            this.department.setName(departmentName);
     }

查询出所有在成都和广州工作的人【查询结果过滤】:

方式①:"select o from User o where o.department.city='成都' or o.department.city='广州'
               --> User类里面关联着Department类,Department类里面有city字段
方式②:String jpql = "select o from User o where o.department.city=? or o.department.city=?
   Query query = entityManager.createQuery(jpql);
   query.setParameter(1, "成都");  //为JPQL的?设置值 【注意:这里是从1开始计算的】
   query.setParameter(2, "广州");
方式③:"select o from User o where o.department.city=?1 or o.department.city=?2"
   Query query = entityManager.createQuery(jpql);
 //query.setParameter(1, "成都");
 //query.setParameter(2, "广州");
   query.setParameter(1, "成都").setParameter(2, "广州");
方式④:"select o from User o where o.department.city=:city1 or o.department.city=:city2"
   Query query = entityManager.createQuery(jpql);
   query.setParameter(1, "成都").setParameter(2, "广州");

查询出所有人信息,按照月薪排序【查询排序】

"select o from User o order by o.salary desc" //desc降序  asc升序

查询出所有人信息,按照部门编号排序【使用关联对象属性排序】

"select o from User o order by o.department.sn
          --> User类里面关联着Department类,Department类里面有sn编号字段

查询出在春熙路和武侯街上班的用户信息【使用IN】

"select o from User o where o.department.street in(?1,?2)"
   query.setParameter(1, "春熙路").setParameter(2, "武侯街");

查询出工资在5000-6000的人【使用BETWEEN..AND..】

"select o from User o where o.salary between ?1 and ?2"

查询出姓名包含er或者en的人【使用LIKE】

"select o from User o where o.name like ?1 or o.name like ?2"
   query.setParameter(1, "er").setParameter(2, "en");

查询出有用户的部门【distinct去重】

"select distinct o.department from User o"

查询出有人的部门【size】   --注意:在JPQL,所有集合都有一个size属性

 "select o from Department o where o.users.size>0"
   --> Department类里面用list集合 private List<User> users = new ArrayList<>(); 

查询出部门信息,按照部门的用户人数排序【使用函数排序】

"select o from Department o order by o.users.size desc"

查询出没有人加入的部门【对集合使用size】

"select o from Department o where o.users.size=0"

查询所有人的姓名和所属部门名称【查询特定属性】

"select o.id,o.name,d.name from User o left join o.department d"

查询出市场部的人员信息及电话:

 "select e,p from Phone p join p.user e join e.department d where d.name='市场部'"  

查询出各个部门人员的平均工资和最高工资【使用聚集函数GROUP】

 "select o.department.name,avg(o.salary),max(o.salary) from User o group by o.department.name"

查询出各个部门参与人数报表:

方式①:"select d,count(e) from Department d left join d.users u group by d"
方式②:"select d,d.users.size from Department d"

查询出大于平均工资的人员信息【子查询】

"select o from User o where o.salary > (select avg(salary) from User )"

注意事项:

①from后面的是一个类名
②如果涉及到查询出的几个值不是对象需要使用Object[]数组接收数据!
③jpql支持 select new User(..) from ...  
④where条件传参时
        ?,?   --> 从1开始计算
        ?1,?2 --> 自己定义顺序
        :name1,:name2 --> 自己取名字
⑤ like的时候  ?1   --> query.setParameter(1, "er") --> "%er%" 
⑥JPQL中所有集合都有 size属性
⑦JPQL关联(JOIN/LEFT JOIN)
     sql:select * 表1 join 表2 on 条件
     jpql:两个法则 --> 1.JPQL自己会消除笛卡尔积不写on子句    2.关联  --> 模型 模型的别名 join 写前面模型别名.对象属性

分页查询:

方式①:
String jpql = "select o from User o";
Query query = entityManager.createQuery(jpql);
//List<Employee> resultList = query.getResultList().subList(0, 5); //  -->假分页:从第几条开始,到第几条结束
//query.setFirstResult(0); //从第几条开始
//query.setMaxResults(5);  //第页查询多少条数据
query.setFirstResult(0).setMaxResults(5);//可理解为sql的 limit 0,5   -->真分页方式②:
String jpql = "select count(o) from User o";  //它查询到的结果有且只有一个值
Query query = entityManager.createQuery(jpql);
//System.out.println(query.getResultList());
//System.out.println(query.getResultList().get(0));
Long count = (Long) query.getSingleResult();

 


http://chatgpt.dhexx.cn/article/Hv1b9kas.shtml

相关文章

HPROF内存文件获取

1.命令生成Dump内存文件 命令&#xff1a;am dumpheap 进程名 输出文件目录<文件名.hprof> 如&#xff1a; am dumpheap app …/demo.hprof 2.通过Android Studio获取 在Android Studio中使用Android Monitor里的Memory Monitor工具监视内存使用情况时&#xff0c;可以…

jvm调优-hprof 文件打开

当服务器出现内存溢出的情况&#xff0c;要下载分析dump内存文件“ dump 当前进程的内存信息: 通过命令 jsp获取java进程pid: jsp: 生成dump文件&#xff1a; jmap -dump:formatb,filedump.hprof pid在当前目录xiazaihprof文件到本地。 如何打开hprof后缀格式的文件呢&#…

使用adb命令导出hprof文件

我们可以使用android studio profiler导入hprof文件分析android应用的内存问题。那么如何从手机上面导出这份文件呢&#xff1f; 把应用的heap 区的数据取出来保存在一个hprof文件上&#xff0c;然后把hprof文件导入到可以查看这个文件的工具上&#xff08;如android studio p…

jvisualvm分析hprof文件

jvisualvm是jdk8的bin目录下自带的一个分析工具&#xff0c;在我下载的jdk11下没有这个工具&#xff0c;这个工具我们可以用来分析hprof文件 首先我们可以配置对应的参数&#xff0c;配置文件地址在\jdk8\lib\visualvm\etc\visualvm.conf visualvm_default_options"-J-cl…

android studio 分析 hprof,Android Studio 中的 HProf静态分析

HProf 在 Android Studio 中的展示详解&#xff0c;基于我对其的理解&#xff0c;我将其根据 heap,count,size,其他将其分成了 4 个层次。 第一层 Heap 分类 Heap 共分为&#xff1a; zygote heap: 与 android zygote 进程共享的 heap image heap: 与系统共享的 heap app heap&…

JProfile 分析OOM hprof文件

JProfile 分析OOM OutOfMemoryError 1.JVM组成 首先要明白JVM组成 方法区-非堆 Method Area、No-HeapJava栈-虚拟机栈 VM Stack、Java Stack本地方法栈 Native Method Stack程序计数器 Program Counter Register堆 Heap 1.1 OOM发生在哪里? OOM可以发生在除了程序计数器外…

java如何打开hprof_hprof是什么文件?如何打开hprof?

hprof是什么文件&#xff1f;如何打开hprof&#xff1f; 发布时间&#xff1a;2020-03-26 17:35:24 来源&#xff1a;亿速云 阅读&#xff1a;1195 作者&#xff1a;小新 hprof是什么文件&#xff1f;如何打开hprof&#xff1f;很多人都不太了解&#xff0c;今天小编为了让大家…

linux命令生成hprof文件,Android平台生成任意进程的hprof文件

一、知识介绍 1.1 为什么要抓取hprof hprof文件中记录了当前进程内存的使用情况,对于一些难以解决的OOM问题,提取出对应进程的hprof文件可以很好的分析这种问题。 分析hprof的工具 Java Heap Analyzes Tool Eclipse Memory Analyzer 1.2 生成hprof指令 adb shell am dumpheap…

java hprof文件_JVM性能调优监控工具hprof使用详解

一、问题现状 现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 …… 这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深…

java hprof文件_hprof是什么文件

hprof是什么文件&#xff1f; 是java进程的内存镜像文件&#xff0c;里面包含了内存堆详细的使用信息。 最近学习深入java虚拟机的书&#xff0c;照着里面的例子跑了下。 如何打开hprof&#xff1f; 下面是demo&#xff1a;/** * VM Args&#xff1a;-Xms20m -Xmx20m -XX:HeapD…

Hprof

转载地址&#xff1a;http://geek.csdn.net/news/detail/90509 一、开发者的自测利器-Hprof命令 1. 示例演示 例子程序&#xff1a; /*** PROJECT_NAME: test* DATE: 16/7/22* CREATE BY: chao.cheng**/ public class HProfTest {public void slowMethod() {try {T…

android hprof,Android Hprof 分析

Android Studio 中的 HProf静态分析 HProf 在 Android Studio 中的展示详解&#xff0c;基于我对其的理解&#xff0c;我将其根据 heap,count,size,其他将其分成了 4 个层次。 第一层 Heap分类 Heap 共分为&#xff1a; zygote heap: 与 android zygote 进程共享的 heap image …

android中hprof文件分析

Hprof基本概念 hprof最初是由J2SE支持的一种二进制堆转储格式&#xff0c;hprof文件保存了当前java堆上所有的内存使用信息&#xff0c;能够完整的反映虚拟机当前的内存状态。 格式 Hprof文件由FixedHead和一系列的Record组成&#xff0c;Record包含字符串信息、类信息、栈信…

hprof 文件查看

https://www.jianshu.com/p/4e6e88f1d211 hprof 文件是 Java 的 内存快照文件&#xff08;Heap Profile 的缩写&#xff09;&#xff0c;格式为 java_pid*.hprof 用于分析 OOM: OutOfMemoryError(堆)内存不足错误 是 JVM 设置 -XX:HeapDumpOnOutOfMemoryError 参数时打印的内容…

Java 内存溢出(二)使用 MAT 分析 .hprof 内存映像文件

目录 一、内存溢出时自动导出 .hprof 文件二、下载安装 MAT三、启动 MAT四、MAT 分析 hprof 文件1.Overview 概览2.Leak Suspects 溢出原因猜测3.Histogram 对象实例数量排序4.Dominator Tree 支配树 .hprof 文件&#xff1a; 是 java 项目的 Heap Dump 文件&#xff0c;也叫内…

Solr文档学习--Solrj的使用

首先启动solr solr.cmd startSolrClient 主要通过SolrClient来连接到Solr服务器 SolrClient有4个实现类 CloudSolrClient SolrJ client class to communicate with SolrCloud. Instances of this class communicate with Zookeeper to discover Solr endpoints for SolrClou…

solrj 对solr 的操作

使用SolrJ操作Solr会比利用httpClient来操作Solr要简单。SolrJ是封装了httpClient方法&#xff0c;来操作solr的API的。SolrJ底层还是通过使用httpClient中的方法来完成Solr的操作。 1、 首先&#xff0c;你需要添加如下jar包 其中apache-solr-solrj-3.4.0.jar、slf4j-api-1.6…

SolrJ的使用

CommonsHttpSolrServer CommonsHttpSolrServer 使用HTTPClient 和solr服务器进行通信。 Java代码 String url "http://localhost:8983/solr"; SolrServer server new CommonsHttpSolrServer( url ); String url "http://localhost:8983/solr";Sol…

sorl

solr&#xff1a; 层面搜索、命中醒目显示并且支持多种输出格式&#xff08;包括 XML/XSLT 和 JSON 格式&#xff09;&#xff0c;Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。 安装&#xff1a;http://blog.csdn.net/millery22/article/details/51446014 对外提…

Solr和Solrj的使用

Solr(4.10.3)&Solrj 部署环境 1.拷贝solr solr-4.10.3\example\solr 目录到【如E:/solr/】,重命名solr为solrhome 【E:/solr/solrhome】 solrhome:solr里面有几个文件 collection1:有一个默认名称为collection1的SolrCore索引库 conf&#xff1a;SolrCore运行配置信息 co…