JavaEE 第十一周

JPQL查询和SQL语言的学习笔记

一. JPQL

   1. 什么是JPQL?

   在 Java EE 中,JPQL就是一种查询语言,具有与SQL 相类似的特征,JPQL是完全面向对象的,具备继承、多态和关联等特性,和hibernate的HQL很相似。

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

一些改变。

   2. 使用

   JPQL 语句支持两种方式的参数定义方式 : 命名参数和位置参数 。在同一个查询语句中只允许使用一种参数定义方式。

   命令参数的格式为:“ : + 参数名”
   例:
   Query query = em.createQuery("select p from Person p where p.personid=:Id ");
   query.setParameter("Id",new Integer(1));
 
   位置参数的格式为“ ?+ 位置编号”
   例:
   Query query = em.createQuery("select p from Person p where p.personid=?1 ");
   query.setParameter(1,new Integer(1));

   JPQL语言的语句可以是 select 语句、update 语句或delete语句,它们都通过 Query 接口封装执行。

   Query接口封装了执行数据库查询的相关方法。调用 EntityManager 的 createQuery、create NamedQuery 及 createNativeQuery 方法可以获得查询对象,进

而可调用 Query 接口的相关方法来执行查询操作。

   步骤如下:

   要从 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语句中你可以像示例中那样的直接将查询条件写在语句中。但是还有更好的方法。在这里你可以使用设置查询参数的方式,其中又有位置参数和命名参数的分别。

   使用位置参数如下所示:

   Query query = em.createQuery(“select p from Person p where p.id=?1”);

   Query.setParameter(1, 1033);//第一个参数是位置,第二个参数查询条件

   使用命名参数如下所示:

   Query query = em.createQuery(“select p from Person p where p.id=:id”);

   Query.setParameter(“id”, 1033);//第一个参数是参数名称,第二个参数查询条件

   需要注意的是位置参数的是位置前加符号”?”,命名参数是名称前是加符号”:”。

二. SQL

   1. 什么是SQL?

   结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。

    2. 构成

    结构化查询语言包含6个部分:

    一:数据查询语言(DQL:Data Query Language):
        其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
     二:数据操作语言(DML:Data Manipulation Language):
       其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
    三:事务处理语言(TPL):
       它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
    四:数据控制语言(DCL):
       它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
    五:数据定义语言(DDL):
       其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
    六:指针控制语言(CCL):
       它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
 
三. 区别
    JPQL是面向对象的查询语言,因此它可以完全理解继承、多态和关联等特征。而且JPQL内置了大量函数,极大地方便了JPQL查询的功能。当然JPQL底层依然
是基于SQL的,但JPQL到SQL的转换无须开发者关心,JPQL解析器会负责完成这种转换,并负责执行这种转换的SQL语句来更新数据库。 
    
     SQL是面向关系数据库的查询语言,因此SQL操作的对象是数据表、数据列;而JQPL操作的对象是实体对象,对象属性。
 
摘自:https://blog.csdn.net/zsm653983/article/details/8114244
         https://blog.csdn.net/zt15732625878/article/details/78378995?foxhandler=RssReadRenderProcessHandler
     

猜你喜欢

转载自www.cnblogs.com/Z--Y/p/9066018.html