JPQL
1、概念
- JPQL(Java Persistence Query Language)Java 持久化查询语言,基于首次在EJB2.0中引入的EJB查询语言(EJB QL),Java持久化查询语言(JPQL)是一种可移植的查询语言,旨在以面向对象表达式语言的表达式,将SQL语法和简单查询语义绑定在一起·使用这种语言编写的查询是可移植的,可以被编译成所有主流数据库服务器上的SQL。
2、特点
- JPQL操作的对象是实体对象和实体属性。
例如:List
3、JPQL语句基本格式
注:与正常的SQL语法相比都是大同小异的;像聚合查询、分组排序、筛选条件等的使用方法都是相同的,主要是参数传递这里不同。
1)JPQL支持两种类型的参数绑定语法。
- 位置参数表示法
其中参数是在查询字符串中指示,该字符串是在一个问号(?)之后紧随参数的编号。当执行查询的时候,开发人员指定应该替换的参数编号。
例如:
Query query=entityManager.createQuery(“select s from Stident s where s.id=?1 and s.username=?2”);
query.setParameter(1,3);
query.setParameter(2,”xiaoming”);
- 命名参数表示法(推荐使用)
通过在一个冒号(:)之后紧随参数名称,在查询字符串对它进行指示,当执行查询的时候,开发人员指定应该替换的参数名称。
例如:
Query query=entityManager.createQuery(“select s from Stident s where s.id=:id and s.username=:username”);
query.setParameter(“age”,21);
query.setParameter(“username”,”Jack”);
推荐使用的原因:
持久化提供的程序通常会采用预编译的方式将命名查询作为程序初始化阶段的一部分。这样就避免了连续解析JPQL和生成SQL的系统开销。
2)JPQL常用的查询方法
- executeUpdate:
- 用来执行批量更新或者删除
- getSingleResult:
- 获取单个结果集。如果没有获取到数据,则会抛出NoResultException异常。如果获取多条数据的话,则会抛出NonUniqueResultException异常
- getResultList
- 获取对应的结果集合,指定顺序的集合,需要使用List作为返回值类型。如果没有获取到数据的话,则返回一个空集合,不会抛出异常
4、小结:JPQL与SQL的区别