作符指定为一个状态字段指定一系列的值。你可以列出一个或多个字符串或参数值(基于位置或命名的),或者利用子查询动态的生成一系列的值。字符型,数字型,枚举型的状态字段可以用在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查询语言详解** Java Persistence API(JPA)是一种标准的Java库,用于管理和持久化Java对象到关系数据库。JPA提供了强大的查询语言——Java Persistence Query Language(JPQL),它允许开发者通过面向对象的...
**JPA查询语言(JPQL)**是Java Persistence API中的一个核心特性,它提供了一种面向对象的查询语言,用于在Java应用程序中检索和操作持久化实体。JPQL类似于SQL,但设计的目标是与对象模型更紧密地集成,而不是直接...
jpa查询详解 JPA(Java Persistence API)是一种 Java 持久层 API,用于处理 Java 对象和关系数据库之间的 Mapping。JPA 查询是 JPA 中的一种重要机制,用于从数据库中检索数据。在本文中,我们将详细介绍 JPA 查询...
JPQL是一种面向对象的查询语言,类似SQL,但操作的是实体而不是数据库表。Criteria API则提供了一个更强大且类型安全的查询构建方式。 5. **事务管理(Transaction)**: 在JPA中,事务是通过`EntityManager`进行...
4. **查询语言(JPQL)**:类似SQL的语句,用于在对象层面上进行查询,可以进行复杂的聚合和关联操作。 5. **Criteria API**:提供了一种类型安全的方式来构建动态查询,比JPQL更具有灵活性和可读性。 在实际开发中...
JPA的官方文档详细介绍了JPA的规范和实现,包括其核心概念、配置、实体管理、查询语言、事务管理以及性能优化等方面。文档通常分为两部分:JSR(Java Specification Requests)文档和API文档。JSR文档定义了JPA的...
6. **JPA Query Language (JPQL)**:JPA提供了一种面向对象的查询语言,类似于SQL,但更关注于对象而非表格。JPQL允许开发者用Java类和属性来编写查询,而不是直接使用数据库表和列。 7. **Criteria API**:除了...
TOPLink JPA提供了完整的JPA规范支持,包括实体管理、查询语言(JPQL)以及事务处理。TOPLink JPA的优势在于其高性能和对复杂数据模型的良好支持,同时也能够无缝集成到EclipseLink(Oracle的开源持久化框架)中,...
9. **JPA Querydsl Support**:Spring Data JPA 还支持 Querydsl,这是一个强大的类型安全的查询语言,它可以进一步提高查询的可读性和可维护性。 10. **Elasticsearch 集成**:虽然不是 Spring Data JPA 的核心...
2. **查询语言(JPQL)**:Java Persistence Query Language,一种类似于SQL的语言,用于在JPA中执行查询操作。JPQL支持面向对象的语法,使得开发者能够用更自然的方式表达查询逻辑。 3. **元数据注解**:JPA使用...
**JPA查询语言(JPQL)** JPA提供了自己的查询语言——Java Persistence Query Language(JPQL),类似于SQL,但更面向对象。例如,以下JPQL查询返回所有用户: ```java String query = "SELECT u FROM User u"; ...
标题“一个基于原生Java代码查询方式的JPA查询框架.zip”指的是一个使用Java Persistence API(JPA)的查询框架,该框架允许开发者使用原生的Java代码进行数据库查询,而不是依赖于HQL(Hibernate Query Language)...
JPA的核心组件包括实体(Entity)、实体管理器(EntityManager)、实体管理工厂(EntityManagerFactory)和查询语言(JPQL)。实体是JPA中的核心概念,它是Java类,代表数据库中的表或视图。实体管理器负责与数据库...
此外,JPA还包括一个功能强大的查询语言,即JPQL(Java Persistence Query Language)。 2. 在Eclipse RCP中使用JPA时,通常需要处理应用的生命周期和依赖性管理。OSGi环境中的每个模块被称为一个“Bundle”,每个...
JPA包括以下3方面的技术: RM映射元数据,JPA支持XML和JDK 5.0注解两种元数据的形式,元...查询语言,这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
3. **查询语言**:JPA引入了一种面向对象的查询语言,与传统的SQL查询相比,它更加自然,更贴近Java开发者的思维模式,减少了代码与数据库查询之间的耦合度。 #### 三、实体对象 实体是JPA中的核心概念,代表了要...
标题中提到的"JPA中文解释"是指对于JPA的概念、原理、使用方法等进行了中文语言的详细解读,这对于中文环境下的开发者来说非常方便,能够更好地理解和应用JPA。JPA的核心理念是对象关系映射(ORM),它将Java对象...
**JPA查询语言**,即JPQL(Java Persistence Query Language),是JPA提供的一个面向对象的查询语言,类似于SQL,但更加面向对象。JPQL用于从数据库检索或更新实体,支持复杂的查询结构,如选择、聚合、连接、子查询...
本节我们将深入探讨"李勇JPA快速入门05_jpa中的查询"这一主题,这涵盖了JPA查询机制的基础和核心概念。 1. **基本查询语言:JPQL** Java Persistence Query Language(JPQL)是JPA提供的面向对象的查询语言,类似...