JPA:JPQL

1.JPQL语言,即Java Persistence Query Language的简称,JPQL是一种和SQL非常类似的中间型和

对象化查询语言,它最终被编译成针对不同底层数据库的SQL查询,从而屏蔽不同数据库的差异

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

 

2.javax.persistence.Query:

.Query接口封装了执行数据库查询的相关方法.调用EntityManager的createQuery,createNamedQuery

及createNativeQuery方法可以获得查询对象,进而可调用Query接口的相关方法来执行查询操作

 

.Query接口的主要方法

-int executeUpdate()

.用于执行update或delete语句

 

-List getResultList()

.用于执行select语句并返回结果集实体列表

 

-Object getSingleResult()

.用于执行只返回单个结果实体的select语句

 

-Query setFirstResult(int startPosition)

.用于设置从哪个实体记录开始返回查询结果

 

-Query setMaxResults(int maxResult)

.用于设置返回结果实体的最大数,与setFirstResult结合使用可实现分页查询

 

-Query setFlushMode(FlushModeType flushMode)

.设置查询对象的Flush模式,参数可以取2个枚举值:FlushModeType.AUTO为自动更新数据库记录,

FlushMode Type.COMMIT为直到提交事务时才更新数据库记录

 

-setHint(String hintName,Object value)

.设置与查询对象相关的特定供应商参数或提示信息,参数名及其取值需要参数特定JPA实现库提供商的文档.

如果第二个参数无效将抛出IllegalArgumentException异常

 

-setParameter(int position,Object value)

.为查询语句的指定位置参数赋值,Position指定参数序号,value为赋给参数的值

 

-setParameter(int position,Date d,TemporalType type)

.为查询语句的指定位置参数赋Date值.Position指定参数序号,value为赋给参数的值,temporalType取TemporalType的枚举常量,

包括DATE,TIME及TIMESTAMP三个,用于将Java的Date型值临时转换为数据库支持的日期时间类型(java.sql.Date,

java.sql.Time及java.sql.Timestamp)

 

-setParameter(int position,Calendar c,TemporalType type)

.为查询语句的指定位置参数赋Calendar值,position指定参数序号,value为赋给参数的值,temporalType的含义及取舍同前

 

-setParameter(String name,Object value)

.为查询语句的指定名称参数赋值

 

-setParameter(Sring name,Date d,TemporalType type)

.为查询语句的指定名称参数赋Date值,用法同前

 

-setParameter(String name,Calendar c,TemporalType type)

.为查询语句的指定名称参数设置Calendar值,name为参数名,其他同前.该方法调用时如果参数位置或参数名不正确,

或者所赋的参数值类型不匹配,将抛出IllegalArgumentException异常

3.简单的查询demo片段:

JPA:JPQL_第1张图片

4.查询部分属性

.如果只须查询实体的部分属性而不需要返回整个实体,例如:

select o.id,o.customerName,o.address.streetNumber from Order o order by o.id

.执行该查询返回的不再是Orders实体集合,而是一个对象数组的集合(Object[]),

集合的每个成员为一个对象数组,可通过数组元素访问各个属性

JPA:JPQL_第2张图片

.若想返回一个对象,修改代码如下:

JPA:JPQL_第3张图片

 

JPA:JPQL_第4张图片

5.NamedQuery,适用于在实体类前使用@NamedQuery标记的查询语句:

.首先在实体类上添加如下代码段,可能会有编译期错误,可忽略,其实去掉SELECT c也可以运行:

查询代码段如下:

JPA:JPQL_第5张图片

6.testNativeQuery,本地SQL,代码段如下:

JPA:JPQL_第6张图片

 

你可能感兴趣的:(JPA:JPQL)