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片段:
4.查询部分属性
.如果只须查询实体的部分属性而不需要返回整个实体,例如:
select o.id,o.customerName,o.address.streetNumber from Order o order by o.id
.执行该查询返回的不再是Orders实体集合,而是一个对象数组的集合(Object[]),
集合的每个成员为一个对象数组,可通过数组元素访问各个属性
.若想返回一个对象,修改代码如下:
5.NamedQuery,适用于在实体类前使用@NamedQuery标记的查询语句:
.首先在实体类上添加如下代码段,可能会有编译期错误,可忽略,其实去掉SELECT c也可以运行:
查询代码段如下:
6.testNativeQuery,本地SQL,代码段如下: