JPQL

什么是JPQL

  JPQL语言,就是Java Persistence Query Language的简称。JPQL是一种和SQL非常类似的中间性和对象化查询语言,它最终会被编译成针对不同底层数据库的SQL查询,从而屏蔽不同数据库的差异。JPQL语言的语句可以是select语句、update 语句或delete语句,它们都通过 Query 接口封装执行。

什么是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); 为查询语句的指定位置参数赋 Calenda r值。position 指定参数序号,value 为赋给参数的值,temporalType 的含义及取舍同前
  • setParameter(String name, Object value); 为查询语句的指定名称参数赋值
  • setParameter(String name, Date d, TemporalType type); 为查询语句的指定名称参数赋 Date 值,用法同前
  • setParameter(String name, Calendar c, TemporalType type); 为查询语句的指定名称参数设置Calendar值。name为参数名,其它同前。该方法调用时如果参数位置或参数名不正确,或者所赋的参数值类型不匹配,将抛出 IllegalArgumentException 异常

JPQL示例

和在 SQL 中一样,JPQL 中的 select 语句用于执行查询。其语法可表示为:

select_clause form_clause [where_clause] [groupby_clause] [having_clause] [orderby_clause]

其中:
from 子句是查询语句的必选子句。
select 用来指定查询返回的结果实体或实体的某些属性。
from 子句声明查询源实体类,并指定标识符变量(相当于SQL表的别名)。
如果不希望返回重复实体,可使用关键字 distinct 修饰。select、from 都是 JPQL 的关键字,通常全大写或全小写,建议不要大小写混用。
在 JPQL 中,查询所有实体的 JPQL 查询语句很简单,如下:
select o from Order o 或 select o from Order as o
这里关键字 as 可以省去,标识符变量的命名规范与 Java 标识符相同,且区分大小写,调用 EntityManager 的 createQuery() 方法可创建查询对象,接着调用 Query 接口的 getResultList() 方法就可获得查询结果集,如下:

Query query = entityManager.createQuery( "select o from Order o"); 
List orders = query.getResultList();
Iterator iterator = orders.iterator();
while(iterator.hasNext() ) {
  // 处理Order
}

其他方法的与此类似,这里不再赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值