JPQL查询

一、什么是JPQL

在 Java EE 中,JPQL( Java 持久性查询语言)是专门为Java 应用程序访问和导航实体实例设计的。JPQL是EJB2使用的查询语言EJB QL的扩展,它继承了EJB QL并对其做了一些改变。

二、JPQL与SQL

JPQL 和 SQL 有很多相似之处。它们都用于访问和操作数据库数据。二者都使用非过程语句 

JPQL 和 SQL 的主要区别在于,JPQL处理 JPA 实体是面向对象的,SQl直接在数据库空间内对表、列、行等关系数据进行处理。

三、使用JPQL

要从 Java 代码内发出 JPQL 查询,您需要利用 EntityManager API 和 Query API 的相应方法,执行以下一般步骤:

1.   使用注入或通过 EntityManagerFactory 实例获取一个 EntityManager 实例。
2.   通过调用相应 EntityManager 的方法(如 createQuery),创建一个 Query 实例。
3.   如果有查询参数,使用相应 Query 的 setParameter 方法进行设置。
4.   如果需要,使用 setMaxResults 和/或 setFirstResult Query 的方法设置要检索的实例的最大数量和/或指定检索的起始实例位置。
5.   如果需要,使用 setHint Query 的方法设置供应商特定的提示。
6.   如果需要,使用 setFlushMode Query 的方法设置查询执行的刷新模式,覆盖实体管理器的刷新模式。
7.   使用相应 Query 的方法 getSingleResult 或 getResultList 执行查询。如果进行更新或删除操作,您必须使用 executeUpdate 方法,它返回已更新或删除的实体实例的数量。

JPQL的查询可以分为命名查询和动态查询。

动态查询

可以使用EntityManager.createQuery方法创建动态查询,唯一的要求是把合法的JPQL语句传递给此方法。如下:
Query query = em.createQuery(“select p from Person p where p.id=1033”);
其中where语句可是可选的。在这里JPQL看上去和SQL语句很像,但应当注意到的是from后边的Person是实体Bean而不是数据表。
在所写的JPQL语句中你可以像示例中那样的直接将查询条件写在语句中。但是还有更好的方法。在这里你可以使用设置查询参数的方式,其中又有位置参数和命名参数的分别。

你可能感兴趣的:(Java学习)