作符指定为一个状态字段指定一系列的值。你可以列出一个或多个字符串或参数值(基于位置或命名的),或者利用子查询动态的生成一系列的值。字符型,数字型,枚举型的状态字段可以用在IN操作符上。状态字段的类型必须与列表中的值的类型一致。IN操作符的语法为:
state-field [NOT] in (item {, item2}* | subquery). 这里有几个例子。
SELECT f FROM Forum f WHERE f.type IN (?1, ?2)SELECT f FROM Forum f WHERE f.type IN (1, 2)
LIKE
LIKE允许你根据部分值搜索字符串字段。JPQL用一个下划线(_)表示你搜索字符字符串中任一字符。在查询语句中可以用百分号(%)表示一系列字符,其它的字符代表他们本身。LIKE的一般格式为:
string-expression [NOT] LIKE pattern [ESCAPE escape-char] 如果你必须在查询语句中使用下划线或百分号作为字面字符,使用ESCAPE格式。例如,你可以用forum.description like ‘QA\_%’ ESCAPE ‘\’。你必须在下划线或百分号前加入反反斜线符号人,并且在搜索字符串后面加入ESCAPE ‘\’语法。这里列出几个例子:
‘tr_ck’可以匹配‘truck’和‘trick’, 但不能匹配‘trucker’。
‘tr%’可以匹配‘truck’, ‘tractor’, ‘trick’, 等等。
‘tr_ck%’可以匹配‘truck’, ‘trick’, 和‘trucker’。
如果你想搜索字符串_hello,你的查询语句应该是这样的:
‘\_hello’ ESCAPE ‘\’ ESCAPE ‘\’告诉数据库,“我正在一个转义字符('\')上使用反斜线”。下面用代码表示:
em.createQuery("SELECT f FROM Forum f " +"WHERE f.description LIKE '\\_%' ESCAPE '\\'"); 在这段代码中,你使用了两个反斜线。第一个是为了Java编译器,第二个是由于JPQL解析器。
如果在MySQL数据库上执行上面的ESCAPE查询语句,你可能会得到一个数据库异常。默认情况下,MySQL会将反斜线识别成一个转义符号,所以它告诉你像处理转义符号那样处理反斜线是错误的。为了使你的查询能在不同数据库之间进行移植。你必须在JDBC连接中对所有MySQL关闭所有MySQL数据库实例上的反斜线转义功能。要在你的JDBC连接上禁用反斜线转义,将下面的URL中的sessionVariables部分添加到你的JDBC连接中。
jdbc:mysql://localhost:3306/db?sessionVariables=sql_mode=NO_BACKSLASH_ESCAPES 更多信息,请参考MySQL文档。
IS NULL
IS NULL比较操作符能够让检测NULL字段,不管是单值路径表达式还是输入参数。你可以使用IS NOT NULL来确保一个单值路径表达式有非空值,或者使用IS NULL来检测NULL值。
SELECT p FROM PrivateMessage p WHERE p.dateRead IS NOT NULL// toUser references a many-to-one relationship, so you can use IS [NOT] NULLSELECT p FROM PrivateMessage p WHERE p.toUser IS NOT NULL// this query does not work because we are using a// collection-value path-expressionSELECT f FROM Forum f WHERE f.topics IS NULL
IS EMPTY
IS [NOT] EMPTY操作用于空或者非空的集合值表达式。
// the above query rewritten to use IS EMPTYSELECT f FROM Forum f WHERE f.topics IS EMPTY// this query will find all forum entities with topics// (i.e. the collection is not empty)SELECT f FROM Forum f WHERE f.topics IS NOT EMPTY
MEMBER
可以用[NOT] MEMBER [OF]来判断一个实体是否是一个集合的一部分。[OF]是可选的,不影响MEMBER比较操作符。你可用可不用。
可以用NOT MEMBER来判断一个实体不是一个集合的组成部分。MEMBER的语法如下:
Expression [NOT] MEMBER [OF] collection-valued path-expression// find the forum instance that contains Topic tQuery q2 = em.createQuery("SELECT f FROM Forum f " +"WHERE :topic MEMBER f.topics");q2.setParameter("topic", t);List results2 = q2.getResultList();
字符串函数(STRING FUNCTIONS)
JPQL查询的WHERE或HAVING语句中支持字符串函数作为函数表达式。
CONCAT(string 1, string 2):将字符串2追加到字符串1。
SUBSTRING(string, starting position, length):从字符串string开始位置starting position截取长度为length字符。
LOWER(string):将一个字符串string转换成小写形式。
UPPER(string):将一个字符串string转换成大写形式。
LENGTH(string):返回字符串string的长度,为整数。
TRIM([[LEADING|TRAILING|BOTH] [char] FROM] string):去掉字符串string头,尾或两者的字符char。最简形式是TRIM(string),可以去掉字符串string头尾的空格字符。
LOCATE(string1, string2 [,start]):返回string2在string1的位置。定位函数有一个可选的起始位置start。
数学函数(ARITHMETIC FUNCTIONS)
JPQL查询的WHERE或HAVING语句中支持数学函数作为函数表达式。
ABS(arithmetic expression):返回算术表达式的绝对值。
SQRT(arithmetic expression):求算术表达式的方根,返回一个Double。
MOD(arithmetic expression 1, arithmetic expression 2):求参数1与参数2的模,返回一个整数。
SIZE(collection-valued path-expression):计算一个集合中元素的数量,并返回一个整数。如果集合为空,返回0。
时间函数(DATETIME FUNCTIONS)
支持以下时间函数。
CURRENT_DATE:当时日期,由数据库决定。
CURRENT_TIME:当时时间,由数据库决定。
CURRENT_TIMESTAMP:当时日期和时间,由数据库决定
SECLECT函数
SELECT语句标识查询结果。SELECT语句包含一个或多个下列元素。
一个路径表达式或是标识变量:表明返回一个实体。
一个单值路径表达式:指定返回一个字段或实体。
一个统计SELECT表达式:表明返回计算结果(如,COUNT(*))。
一个构造器表达式:允许你从选择的条目中返回一个对象。
SELECT语句允许查询各种实体,计算结果,投影值,非实体类。你可以在SELECT语句中使用集合值的路径表达式,然而,下面表达是非法的。
SELECT f.topics FROM Forum f
分享到:
相关推荐
jpa查询语言.pdf
JPA查询语言[归类].pdf
JPA包括以下3方面的技术: RM映射元数据,JPA支持XML和JDK 5.0注解两种元数据的形式,元...查询语言,这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
JPA 规范部分详细的介绍了 JPA 中实体 Bean 的定义,并介绍了实体 Bean 支持的注释、全新的查询语言、实体管理接口、容器实现规范等内容。 JPA 标准制定过程中充分吸收了目前已经出现的所有持久化技术的所有优点,...
可媲美JDBC的查询能力: JPA的查询语言是面向对象的,JPA定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。 支持面向对象...
JPA 的全称是 Java Persistence API, 即 Java 持久...JPA 的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以 看成是 Hibernate HQL 的等价物。 本文档包含了JPA的课件笔记与学习标注。
每个批注的详细与使用 查询语言 教程等等
查询语言,用于使用现有数据完成这些查询。 GraphQL 为您的 API 中的数据提供了完整且易于理解的描述,让客户能够准确地询问他们需要什么,更容易随着时间的推移发展 API,并启用强大的开发人员工具。 您的应用程序...
JDBC支持处理大量的数据,能够保证数据的一致性,支持信息的并发访问,提供 SQL 查询语言查找数据。JDBC 所使用的关系模型不是为保存对象而设计的,因此迫使开发者选择在处理持久数据时放弃面向对象编程,或者自己去...
EJB 查询语言开发。其实关于JPA 还有一部分是基于EJB 容器环境 的开发,那一部分内容我们将会放到后面的EJB 开发一章来介绍。由于MyEclipse 6 对JPA 开发提供了很方便的支持,因此我们的内容主要就集中在如何使用...
查询语言查找数据。 JDBC 所使用的关系模型不是为保存对象而设计的, 因此迫使开发者选择在处理持久数据时 放弃面向对象编程, 或者自己去开发将面向对象特性(比如: 类之间的继承) 和关系型数据 库进行...
13.1.3.6 JPA 查询语言(JPA QL)简介...................... 19 13.1.3.7 回调方法 ....................................... 21 13.2 准备工作............................................ 22 13.3创建...
Spring Data 是 Spring 的一个子项目。用于简化数据库访问,支持NoSQL 和 关系数据存储。使用 SpringData 可以...4:详解Spring Data JPA各种查询方式 5:详解Spring Data JPA在web方面的用法 具体内容,可以参考大纲:
第11章 JPA的查询支持 456 11.1 查询API 457 11.1.1 面向对象的JPQL 457 11.1.2 查询API简介 457 11.2 执行查询 459 11.2.1 使用Query创建查询 459 11.2.2 设置查询参数 459 11.2.3 取得查询结果 460 11.3 JPQL语法 ...
通过JPA重新控制SQL FluentJPA是一种用于关系(SQL)数据库和JPA的语言集成查询(LINQ)技术。 它允许您通过直接集成到语言中来使用Java编写强类型查询。FluentJPA如何集成到Java中? 乍一看,似乎我们需要Java...
本系统基本完成了一个基于spring boot + JPA的进销存管理系统,主要实现采购管理、库存管理、销售管理、查询统计、资料管理和系统管理功能。 本系统的实现依靠了很多计算机技术,包括Java语言、Spring boot框架、JPA...
1、系统主要功能: 管理员:统计分析、学生管理、课程管理 学生:选课中心、我的课程 2.涉及技术框架: web框架:SpringBoot 数据库框架:Sping Data ...4.教师查询功能,可以根据教师姓名查询该教师的所有授课课程;
现采购管理、库存管理、销售管理、查询统计、资料管理和系统管理功能。 本系统的实现依靠了很多计算机技术,包括Java语言、Spring boot框架、 JPA持久层框架和MySQL数据库。带视频,带文档 运行环境:idea/...
一、预备知识JPA即JavaPersistenceAPI,它是是EJB3.0规范(JSR...1,简化程序模型2,使用注释,简化配置3,ORM:对象关系映射4,EJB-QL:提供了动态查询,和功能强大的EJB查询语言5,独立。可在EJB容器之外单独运行,也
API 提供类似于 SQL 的查询语言,但使用对象而不是数据库中的关系实体。 Java Persistence API 基于实体,这些实体是简单的带注释的 POJO,以及这些实体的管理器 (EntityManager),它提供处理它们的功能(添加、...