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的更多相关文章

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

    Atitit oodbms的查询,面向对象的sql查询jpa jpql hql 1.1. 标准API历史1 1.2. JPA定义了独特的JPQL(Java Persistence Query Lang ...

  2. [转] JPQL

    原文地址:http://blog.csdn.net/suncaishen/article/details/6512028 select name ,age from user; //原生SQL语句 s ...

  3. JPA学习(6)JPQL

    JPQL语言,即 Java Persistence Query Language 的简称.JPQL 是一种和 SQL 非常类似的中间性和对象化查询语言,它最终会被编译成针对不同底层数据库的 SQL 查 ...

  4. JPA学习---第八节:使用JPQL语句进行查询

    1.JPQL 语句查询,代码如下: @Test public void query(){ EntityManagerFactory factory = Persistence.createEntity ...

  5. JavaEE(17) - JPA查询API和JPQL

    1. 获取查询结果 2. JPQL函数和JPQL表达式 #1. 使用from子句 #2. 查询部分属性 #3. 查询中使用构造器 3. JPQL的关联查询和多态查询 #1. 多态查询 #2. 隐式连接 ...

  6. 如何使用JPQL写纯SQL语句

    使用JPQL,需要把SQL语句修改成类似HQL 语句.SQL 查询的是数据库,而JPQL 查询的是对象和属性,在语法上是有些不同的.对于有些用JPQL 无法写出来的查询,还是使用原生SQL写出来方便 ...

  7. JPQL的关联查询

    一般情况下,直接使用mysql语句写关联语句,是join on 的形式,如下: select * from tablea as a left join tableb as b on b.tablea_ ...

  8. JPQL设置自增长、只读、文本类型等的注解

    JAVA中使用JPQL 一种设置id自动生成,自增长的方法 private long id; @Id @GeneratedValue(generator="_native") @G ...

  9. JPQL模糊匹配单个字符

    JPQL模糊匹配,不是%,而是单个字符,该怎么办?比如我要查出数据库中满足后三位是数字的字符串 对于mysql来说,使用通配符 %和_可以轻松解决,但是对于JPQL来说模糊查询就伤脑筋了... 有一个 ...

随机推荐

  1. 如何安装mysql

    如何安装mysql对于初学者来说的确是很麻烦,首先要知道安装mysql仅仅只是安装一个mysql系统,是没有任何可视化操作界面的,所以还要安装一个mysql的管理工具,这是初学者容易蒙的地方之一. m ...

  2. ArcGIS API for JavaScript 4.3 与ArcGIS Server联动使用【地图服务】

    [前言] 有好些网友问我怎么使用Server发布的地图服务了,其实非常的简单. 我在这里先声明:不提供Server软件,需要的请自行使用互联网搜索资源: 不阐述Server如何发布各各种服务,但是我会 ...

  3. 强推一款开源集成开发环境——Geany

    本人是一个标标准准的程序员,集成开发环境在电脑上大概看一下有:Code Blocks(C/C++),VS(C#,C/C++),eclipse(Java),Hbuild和web storm(前端),py ...

  4. LAMP第四部分mysql操作

    1. 忘记root密码编辑mysql主配置文件 my.cnf 在[mysqld]字段下添加参数  skip-grant  ,重启数据库服务,这样就可以进入数据库不用授权了 mysql -uroot , ...

  5. 编译Twitter的Heron时一直报错“heron/bazel_configure.py", line 25, in <module> import semver ImportError: No module named semver”如何处理。

    今天编译heron的时候,从官方git到的源码bazel_configure的时候一直报错如下: Traceback (most recent call last): File , in <mo ...

  6. [编织消息框架][JAVA核心技术]动态代理应用6-设计生成类

    上篇介绍到rpc可以使用接口与实现类来约束书写 根据接口用javassist生成两个代理类 1.sendProxy 发送处理,调用方式可以是远程/本地 2.receiveProxy 接收处理,内部调用 ...

  7. Python 为何能坐稳 AI 时代头牌语言

    原文链接:https://mp.weixin.qq.com/s?__biz=MzI0ODcxODk5OA==&mid=2247487055&idx=2&sn=ca0fe8740 ...

  8. 为Python添加中文关键字

    狗屎咖啡 2 个月前 原址: https://zhuanlan.zhihu.com/p/31159526 swizl/cnpython 1. 大部分语法,可以按下面方法加同义的中文token第1步. ...

  9. Xamarin.Android中实现延迟跳转

    http://blog.csdn.net/candlewu/article/details/52953228 方法一: 使用Handler().PostDelayed 延迟启动 new Handler ...

  10. Python装饰器的解包装(unwrap)

    在Python 3.4 中,新增一个方法unwrap,用于将被装饰的函数,逐层进行解包装. inspect.unwrap(func, *, stop=None) unwrap方法接受两个参数:func ...