JPA - Criteria API
-
简述
Criteria API 是用于定义实体查询的预定义 API。它是定义 JPQL 查询的另一种方式。这些查询是类型安全的、可移植的并且易于通过更改语法进行修改。与 JPQL 类似,它遵循抽象模式(易于编辑模式)和嵌入对象。元数据 API 与标准 API 混合在一起,为标准查询建模持久实体。标准 API 的主要优点是可以在编译时更早地检测到错误。基于字符串的 JPQL 查询和基于 JPA 标准的查询在性能和效率上是相同的。 -
标准 API 的历史
标准 API 包含在 JPA 的所有版本中,因此标准 API 的每一步都会在 JPA 的规范中进行通知。- 在 JPA 2.0 中,标准查询 API、查询的标准化被开发。
- 在 JPA 2.1 中,包含了 Criteria 更新和删除(批量更新和删除)。
-
条件查询结构
Criteria API 和 JPQL 密切相关,允许在其查询中使用类似的运算符进行设计。它遵循 javax.persistence.criteria 包来设计查询。查询结构表示语法标准查询。以下简单条件查询返回数据源中实体类的所有实例。该查询演示了创建条件的基本步骤。- EntityManager实例用于创建CriteriaBuilder对象。
- CriteriaQuery实例用于创建查询对象。此查询对象的属性将使用查询的详细信息进行修改。
- 调用CriteriaQuery.from方法来设置查询根。
- 调用CriteriaQuery.select来设置结果列表类型。
- TypedQuery<T>实例用于准备执行查询并指定查询结果的类型。
- TypedQuery<T>对象上的getResultList方法以执行查询。此查询返回一个实体集合,结果存储在一个 List 中。
-
条件 API 示例
让我们考虑员工数据库的例子。让我们假设 jpadb.employee 表包含以下记录:在 Eclipse IDE 中创建一个名为的 JPA 项目 JPA_Eclipselink_Criteria. 本项目所有模块如下图所示:创建实体
创建一个名为的包 com.jc2182.eclipselink.entity 在下面 ‘src’ 包裹。创建一个名为的类 Employee.java在给定的包下。Employee 类实体如下所示:持久化文件
需要 Persistence.xml 文件来配置数据库和实体类的注册。Persistence.xml 将由 Eclipse IDE 在创建 JPA 项目时创建。配置细节是用户规范。persistence.xml 文件如下所示:服务类
该模块包含服务类,它使用元数据 API 初始化实现 Criteria 查询部分。创建一个名为的包‘com.jc2182.eclipselink.service’. 类名为CriteriaAPI.java在给定的包下创建。DAO类如下所示:编译并执行上述程序后,您将在 Eclipse IDE 的控制台面板中得到如下输出: