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. ES6 函数的扩展3

    箭头函数 基本用法 ES6允许使用"箭头"(=>)定义函数 var f = v => v; 上面的箭头函数等同于: var f = function(v) { retu ...

  2. [编织消息框架][netty源码分析]1分析切入点

    在分析源码之前有几个疑问 1.BOSS线程如何转交给handle(业务)线程2.职业链在那个阶段执行3.socket accept 后转给上层对象是谁4.netty控流算法 另外要了解netty的对象 ...

  3. docker:(1)docker基本命令使用及发布镜像

    docker镜像可以完全看作一台全新的电脑使用,无论什么镜像都是对某一东西进行了配置,然后打包后可以快速移植到需要的地方直接使用 省去复杂的配置工作 比如java web项目部署,如果是新部署,需要装 ...

  4. PHP 购物车 php闭包 array_walk

    <?php class Cart { const PRICE_BUTTER = 1.00; const PRICE_MILK = 3.00; const PRICE_EGGS = 6.95; p ...

  5. [总结]-2018 w1

    不想总结 2017,过去的就过去吧,不过自己在 2017 年还是收获了很多,最重要的就是赚钱.赚钱还是需要两把刷子,所以,2018 的小目标就是学习数据分析和机器学习.希望自己在这两个领域能搞点事情. ...

  6. 阿里云EMR集群初始化后的开发准备工作

              前言:EMR的集群使用越来越普遍,但是每一次的集群释放到集群的重新创建,期间总有一些反复的工作需要查询与配置.为方便后续工作查阅,现在对集群初始化后的工作进行大概的梳理如下.   ...

  7. JavaWeb项目中获取对Oracle操作时抛出的异常错误码

    最近在项目中碰到了这么一个需求,一个JavaWeb项目,数据库用的是Oracle.业务上有一个对一张表的操作功能,当时设置了两个字段联合的唯一约束.由于前断没有对重复字段的校验,需要在插入时如果碰到唯 ...

  8. linux系统编程:IO读写过程的原子性操作实验

    所谓原子性操作指的是:内核保证某系统调用中的所有步骤(操作)作为独立操作而一次性加以执行,其间不会被其他进程或线程所中断. 举个通俗点的例子:你和女朋友OOXX的时候,突然来了个电话,势必会打断你们高 ...

  9. MySQL数据库操作

    一创建数据库 1 语法(help create database) CREATE DATABASE 数据库名 charset utf8; 2 数据库命名规则: 可以由字母.数字.下划线.@.#.$ 区 ...

  10. 【二分图】洛谷P1640连续攻击游戏

    题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...