JPA的查询语言JPQL

时间:2022-09-22 09:43:10

        JPA的查询语言(JPQL)是一种和SQL非常类似的中间性和对象化查询语言。它可以被编译成不同的底层数据库能接受的SQL,从而屏蔽不同数据库的差异,确保用JPQL查询语言编写的代码可在不同的数据库上运行。比起EJB 2.1的查询语言,EJB3可以运行期构造,支持多态,远远比EJB 2.1的查询更灵活和功能强大。在程序中使用JPQL可以使用大写(SELECT)或者小写(select),但不要大小写(比如:Select)混合使用。

          javax.persistence.Query是EJB3查询操作的接口。进行查询,首先要通过EntityManager 获得Query对象.

        JPQL就是一种查询语言,具有与SQL相类似的特征,JPQL是完全面向对象的,具备继承、多态和关联特性,和hibernate HQL很类似。SPQL在java空间内对类和对象(实体)进行操作,SQL在数据库空间内对表、列和行进行操作。

创建JPA查询所遵循的步骤与传统JDBC查询类似。两者的区别在于获得数据库连接的方式以及维护查询本身的方式。在JDBC中,一般直接获取数据库连接。与之相反把数据库连接隐藏在、EntityManager之后。

       JPA的查询语言JPQL

执行查询:

如果你使用过Hibernate查询,你会注意到这些框架中的查询API和EJB3 Java 持久化API有许多相似之处。在前面我们提到过,在EJB3中运行查询有三个步骤:

第一步:创建EntityManager的实例

第二步:创建查询的实例

第三步:执行查询

如何创建EntityManager的实例,可以注入容器管理的EntityManager的实例,或同EntityManagerFactory创建应用程序管理的EntityManager。重点讲解一下后两个步骤。我们首先介绍创建查询实例,然后分析Query接口中用于执行查询的方法。

在使用JPQL执行命名查询或动态查询之前,必须创建用于检索持久化数据的查询实例。EntityManager接口提供用于创建查询实例的方法,以及用于创建原生SQL查询的方法,表2列出了这些方法。

JPA的查询语言JPQL

一些用于创建查询实例的方法使用JPQL,而其它方法使用原生SQL查询。建议你仅把原生SQL作为最后手段。

1.创建命名查询实例Queryquery=em.createNamedQuery("findAllCategories");

EntityManager实例em负责处理获得命名查询findAllCategories和返回引用的所有细节,我们把些引用赋值给query对象。

2.创建动态查询实例

只要EntityManager可用,就可以查询动态查询。这包括在会话bean、MDB、WEB应用程序中,或容器之外(只要能够访问EntityManager即可)。EJB2不支持动态查询,因此很多开发者认为这是一个巨大的局限。

可以使用EntityManager.createQuery方法创建动态查询,唯一的要求是把合法的JPQL语句传递给此方法。EntityManager是容器管理的实体管理器还是应用程序管理器的实体管理器没有区别。

Queryquery=em.createQuery('"selectiFromItemi");

2.2使用Query接口

Query接口定义了若干用于执行查询的方法。它提供的方法用于设置Query实例参数、指定结果的分页属性、控制清除模式等。Query接口对于JPQL和原生SQL没有区别,并且相同接口可以用于两种查询类型。

JPA的查询语言JPQL

下一篇将详细介绍JPQL,敬请关注!