JPQL
JPQL语言
JPQL语言,即 Java Persistence Query Language 的简称。
JPQL是一种和 SQL 非常类似的中间性和对象化查询语言,
它最终会被编译成针对不同底层数据库的SQL查询,从而屏蔽不同数据库的差异。
JPQL语言的语句可以是 select 语句、update 语句或delete语句,它们都通过 Query 接口封装执行。
JPQL主要用于JPA查询数据,和SQL语句的语法大同小异; --最基本的查询:
SELECT p FROM Player p
--查询出所有的player,包括其子类,也可以写成这样
SELECT p From Player as p
--去除重复的元素
SELECT DISTINCT
p
FROM Player p
WHERE p.position = ?1
关键字DISTINCT去除了重复的元素,并且接受参数设置条件过滤 --结合查询关联
--查询所有有team的player
SELECT DISTINCT p
FROM Player p, IN(p.teams) t --也可以写成如下:
SELECT DISTINCT p
FROM Player p JOIN p.teams t --或者: SELECT DISTINCT p
FROM Player p
WHERE p.team IS NOT EMPTY --关联关系的查询过滤 SELECT t
FROM Team t JOIN t.league l
WHERE l.sport = ’soccer’ OR l.sport =’football’ --查询所有league sports属性的team对象 SELECT DISTINCT p
FROM Player p, IN (p.teams) t
WHERE t.league.sport = :sport --其他的查询表达式
--LIKE: SELECT p
FROM Player p
WHERE p.name LIKE ’Mich%’ --IS NULL: SELECT t
FROM Team t
WHERE t.league IS NULL --IS EMPTY: SELECT p
FROM Player p
WHERE p.teams IS EMPTY --主要用于判断关系实体一对多集合
--在判断日期范围的时候尤其有用;
--BETWEEN SELECT DISTINCT p
FROM Player p
WHERE p.salary BETWEEN :lowerSalary AND :higherSalary --等价于: p.salary >= :lowerSalary AND p.salary <= :higherSalary --复合条件:
--查找薪水比指定姓名的员工更高的员工 SELECT DISTINCT p1
FROM Player p1, Player p2
WHERE p1.salary > p2.salary AND p2.name = :name --IN:
o.country IN (’UK’, ’US’, ’France’)
--同时你也可以在In语句中设置参数:
o.country IN (’UK’, ’US’, ’France’, :country)
--子查询: SELECT c
FROM Customer c
WHERE (SELECT COUNT(o) FROM c.orders o) > 10 --EXISTS子查询: SELECT DISTINCT emp
FROM Employee emp
WHERE EXISTS (
SELECT spouseEmp
FROM Employee spouseEmp
WHERE spouseEmp = emp.spouse) --ALL和ANY配合=<>=>使用 SELECT emp
FROM Employee emp
WHERE emp.salary > ALL (
SELECT m.salary
FROM Manager m
WHERE m.department = emp.department) --其他函数: CONCAT(String, String)String
LENGTH(String)int
LOCATE(String, String [, start])int
SUBSTRING(String, start, length)String
TRIM([[LEADING|TRAILING|BOTH] char) FROM] (String)String
LOWER(String)String
UPPER(String)String --算法函数: Function SyntaxReturn Type
ABS(number)int, float, or double
MOD(int, int)int
SQRT(double)double
SIZE(Collection)int --返回参数:
1) 实体对象 SELECT t
FROM Player p, IN (p.teams) t 2) Objecth或者Object[] SELECT c.name, c.country.name
FROM customer c
WHERE c.lastname = ’Coss’ AND c.firstname = ’Roxane’ 返回一个Object[] list,[0]为name,[1]为country name --Select语句的聚合函数: AVGDoubleReturns the mean average of the fields.
COUNTLongReturns the total number of results.
MAXthe type of the fieldReturns the highest value in the result set.
MINthe type of the fieldReturns the lowest value in the result set.
SUMLong (for integral fields)Double (for floating point fields)BigInteger (for BigInteger fields)BigDecimal (forBigDecimal fields)Returns the sum of all the values in the result set. --如: SELECT COUNT(l.price)
FROM Order o JOIN o.lineItems l JOIN o.customer c
WHERE c.lastname = ’Incandenza’ AND c.firstname = ’Hal’ --构造语句: SELECT NEW com.xyz.CustomerDetail(c.name, c.country.name)
FROM customer c
WHERE c.lastname = ’Coss’ AND c.firstname = ’Roxane’ 能够利用查出的数据直接构造出对象 --Order By: SELECT p.product_name
FROM Order o, IN(o.lineItems) l JOIN o.customer c
WHERE c.lastname = ’Faehmel’ AND c.firstname = ’Robert’
ORDER BY o.quantity --GROUP BY: SELECT c.country, COUNT(c)
FROM Customer c GROUP BY c.country --Having: SELECT c.status, AVG(o.totalPrice)
FROM Order o JOIN o.customer c
GROUP BY c.status HAVING c.status IN (1, 2, 3)
JPQL的更多相关文章
- Atitit oodbms的查询,面向对象的sql查询jpa jpql hql
Atitit oodbms的查询,面向对象的sql查询jpa jpql hql 1.1. 标准API历史1 1.2. JPA定义了独特的JPQL(Java Persistence Query Lang ...
- [转] JPQL
原文地址:http://blog.csdn.net/suncaishen/article/details/6512028 select name ,age from user; //原生SQL语句 s ...
- JPA学习(6)JPQL
JPQL语言,即 Java Persistence Query Language 的简称.JPQL 是一种和 SQL 非常类似的中间性和对象化查询语言,它最终会被编译成针对不同底层数据库的 SQL 查 ...
- JPA学习---第八节:使用JPQL语句进行查询
1.JPQL 语句查询,代码如下: @Test public void query(){ EntityManagerFactory factory = Persistence.createEntity ...
- JavaEE(17) - JPA查询API和JPQL
1. 获取查询结果 2. JPQL函数和JPQL表达式 #1. 使用from子句 #2. 查询部分属性 #3. 查询中使用构造器 3. JPQL的关联查询和多态查询 #1. 多态查询 #2. 隐式连接 ...
- 如何使用JPQL写纯SQL语句
使用JPQL,需要把SQL语句修改成类似HQL 语句.SQL 查询的是数据库,而JPQL 查询的是对象和属性,在语法上是有些不同的.对于有些用JPQL 无法写出来的查询,还是使用原生SQL写出来方便 ...
- JPQL的关联查询
一般情况下,直接使用mysql语句写关联语句,是join on 的形式,如下: select * from tablea as a left join tableb as b on b.tablea_ ...
- JPQL设置自增长、只读、文本类型等的注解
JAVA中使用JPQL 一种设置id自动生成,自增长的方法 private long id; @Id @GeneratedValue(generator="_native") @G ...
- JPQL模糊匹配单个字符
JPQL模糊匹配,不是%,而是单个字符,该怎么办?比如我要查出数据库中满足后三位是数字的字符串 对于mysql来说,使用通配符 %和_可以轻松解决,但是对于JPQL来说模糊查询就伤脑筋了... 有一个 ...
随机推荐
- 如何在MQ中实现支持任意延迟的消息?
什么是定时消息和延迟消息? 定时消息:Producer 将消息发送到 MQ 服务端,但并不期望这条消息立马投递,而是推迟到在当前时间点之后的某一个时间投递到 Consumer 进行消费,该消息即定时消 ...
- K:java中properties文件的读写
Properties类与.properties文件: Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集的类,不过Properties有特殊 ...
- C# 防止同时调用=========使用读写锁三行代码简单解决多线程并发的问题
http://www.jb51.net/article/99718.htm 本文主要介绍了C#使用读写锁三行代码简单解决多线程并发写入文件时提示"文件正在由另一进程使用,因此该进程无 ...
- Python day 3 (3)
一:判断语句: 1 if 语句 : 2 或者if 语句 : else : 3 或者if 语句 : elif 语句 : else : 4注意:的使用,缩进一般用4个空格来完成. 二:input 语 ...
- Fiddler中如何过滤会话、查询会话、保存回话、对比会话
1.Fiddler中如何过滤会话 在抓包时,会捕捉到很多的会话,但是我们只关心特定的接口会话,这个时候我们可以使用过滤功能,来帮助我们从一大堆会话中筛选去我们关心的会话 (1)勾选过滤器选项Filte ...
- PXE+kickstart网络安装CentOS7.4系统及过程中各种报错
环境:关闭防火墙.selinux 注意:虚拟机进行网络安装的话,7.3以后的系统是需要2G以上的内存 [root@kickstart ~]# cat /etc/redhat-release CentO ...
- JQuery编写简易京东购物车功能
前天无意间看到有一位程序员的博客,有一篇名为无聊时编写的购物车,看了之后,只是觉得很垃圾,因为代码很臃肿,当然我写的也不咋地,当然我也是复 习一下所学的js,再敲这个的期间遇到了如下问题,1:子元素父 ...
- 【转】adb shell dumpsys 命令
adb shell dumpsys,默认打印出当前系统所有service信息,在后面可加上具体的服务名 需要列出当前运行的服务,可运行: adb shell dumpsys | findstr DUM ...
- 深入理解JVM(三)——配置参数
JVM配置参数分为三类参数: 1.跟踪参数 2.堆分配参数 3.栈分配参数 这三类参数分别用于跟踪监控JVM状态,分配堆内存以及分配栈内存. 跟踪参数 跟踪参数用于跟踪监控JVM,往往被开发人员用于J ...
- .NET HttpClient的缺陷
using (HttpClient client = new HttpClient()){} 每次发起http请求每次new httpClient,它会打开许多套接字,比你实际的需求多许多,这极大地增 ...