JPA(Java Persistence API)学习十六(标准API介绍)
1.概述
标准(Criteria)API是构建实体及其持久状态查询的最常用方法之一。
它只是定义JPA查询的另一种方法。Criteria API定义了一个独立于平台的条件查询,
用Java编程语言编写。 它是在JPA 2.0中引入的。 这背后的主要目的是提供一种类型安全的方式来表达查询。
2.创建条件查询的步骤
第一步: 通过在
EntityManager接口实例上调用getCriteriaBuilder()方法创建CriteriaBuilder接口的对象。 EntityManager em = emf.createEntityManager();
CriteriaBuilder cb=em.getCriteriaBuilder();
第二步:构建一个
CriteriaQuery接口的实例来创建一个查询对象。 CriteriaQuery<StudentEntity> cq=cb.createQuery(StudentEntity.class);
第三步:从
CriteriaQuery对象的方法调用来设置查询根。 Root<StudentEntity> stud=cq.from(StudentEntity.class);
第四步:调用
CriteriaQuery对象的select()方法来指定查询结果的类型。 CriteriaQuery<StudentEntity> select = cq.select(stud);
第五步:创建
Query接口的实例并指定用于访问数据库记录的方法的类型。 Query q = em.createQuery(select);
第六步:通过调用查询接口的方法来控制查询的执行。
List<StudentEntity> list = q.getResultList();
3.标准API查询子句的方法(以下是相应接口和方法的子句列表)
| 子句 | Criteria API接口 | 方法 |
|---|---|---|
| SELECT | CriteriaQuery | select() |
| FROM | AbstractQuery | from() |
| WHERE | AbstractQuery | where() |
| ORDER BY | CriteriaQuery | orderBy() |
| GROUP BY | AbstractQuery | groupBy() |
| HAVING | AbstractQuery | having() |
注意: CriteriaQuery接口是AbstractQuery接口的子接口。
4.标准的select查询
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<StudentEntity> cq = cb.createQuery(StudentEntity.class);
em.getTransaction().begin();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<StudentEntity> cq = cb.createQuery(StudentEntity.class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);
cq.select(stud.get("s_name"));
CriteriaQuery<StudentEntity> select = cq.select(stud);
TypedQuery<StudentEntity> q = em.createQuery(select);
List<StudentEntity> list = q.getResultList();
TypedQuery<StudentEntity> q = em.createQuery(select);
List<StudentEntity> list = q.getResultList();
System.out.println("s_id");
for (StudentEntity s : list) {
System.out.println(s.getS_id());
System.out.println(s.getS_id());
}
em.getTransaction().commit();
em.close();
emf.close();
em.close();
emf.close();
5.选择多个表达式(查询)
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<StudentEntity> cq = cb.createQuery(StudentEntity.class);
em.getTransaction().begin();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<StudentEntity> cq = cb.createQuery(StudentEntity.class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);
cq.multiselect(stud.get("s_id"), stud.get("s_name"), stud.get("s_age"));
CriteriaQuery<StudentEntity> select = cq.select(stud);
TypedQuery<StudentEntity> q = em.createQuery(select);
List<StudentEntity> list = q.getResultList();
CriteriaQuery<StudentEntity> select = cq.select(stud);
TypedQuery<StudentEntity> q = em.createQuery(select);
List<StudentEntity> list = q.getResultList();
System.out.print("s_id");
System.out.print("\t s_name");
System.out.println("\t s_age");
System.out.print("\t s_name");
System.out.println("\t s_age");
for (StudentEntity s : list) {
System.out.print(s.getS_id());
System.out.print("\t" + s.getS_name());
System.out.println("\t" + s.getS_age());
}
System.out.print(s.getS_id());
System.out.print("\t" + s.getS_name());
System.out.println("\t" + s.getS_age());
}
em.getTransaction().commit();
em.close();
emf.close();
em.close();
emf.close();
6.标准ORDER BY示例
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<StudentEntity> cq = cb.createQuery(StudentEntity.class);
em.getTransaction().begin();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<StudentEntity> cq = cb.createQuery(StudentEntity.class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);
cq.orderBy(cb.asc(stud.get("s_age")));//升序排序
//cq.orderBy(cb.desc(stud.get("s_age"))); //降序排序
CriteriaQuery<StudentEntity> select = cq.select(stud);
TypedQuery<StudentEntity> q = em.createQuery(select);
List<StudentEntity> list = q.getResultList();
CriteriaQuery<StudentEntity> select = cq.select(stud);
TypedQuery<StudentEntity> q = em.createQuery(select);
List<StudentEntity> list = q.getResultList();
System.out.print("s_id");
System.out.print("\t s_name");
System.out.println("\t s_age");
System.out.print("\t s_name");
System.out.println("\t s_age");
for (StudentEntity s : list) {
System.out.print(s.getS_id());
System.out.print("\t" + s.getS_name());
System.out.println("\t" + s.getS_age());
}
System.out.print(s.getS_id());
System.out.print("\t" + s.getS_name());
System.out.println("\t" + s.getS_age());
}
em.getTransaction().commit();
em.close();
emf.close();
em.close();
emf.close();
7.标准WHERE示例
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.getTransaction().begin();
CriteriaBuilder cb = em.getCriteriaBuilder();
AbstractQuery<StudentEntity> cq1 = cb.createQuery(StudentEntity.class);
AbstractQuery<StudentEntity> cq2 = cb.createQuery(StudentEntity.class);
AbstractQuery<StudentEntity> cq2 = cb.createQuery(StudentEntity.class);
Root<StudentEntity> stud1 = cq1.from(StudentEntity.class);
cq1.where(cb.greaterThan(stud1.get("s_age"), 22));//greaterThan大于
CriteriaQuery<StudentEntity> select1 = ((CriteriaQuery<StudentEntity>) cq1).select(stud1);
TypedQuery<StudentEntity> tq1 = em.createQuery(select1);
List<StudentEntity> list1 = tq1.getResultList();
TypedQuery<StudentEntity> tq1 = em.createQuery(select1);
List<StudentEntity> list1 = tq1.getResultList();
System.out.println("Students having age greater than 22");
System.out.print("s_id");
System.out.print("\t s_name");
System.out.println("\t s_age");
System.out.print("\t s_name");
System.out.println("\t s_age");
for (StudentEntity s : list1) {
System.out.print(s.getS_id());
System.out.print("\t" + s.getS_name());
System.out.println("\t" + s.getS_age());
}
System.out.print(s.getS_id());
System.out.print("\t" + s.getS_name());
System.out.println("\t" + s.getS_age());
}
Root<StudentEntity> stud2 = cq2.from(StudentEntity.class);
cq2.where(cb.lessThan(stud2.get("s_age"), 22));//lessThan小于
CriteriaQuery<StudentEntity> select2 = ((CriteriaQuery<StudentEntity>) cq2).select(stud2);
TypedQuery<StudentEntity> tq2 = em.createQuery(select2);
List<StudentEntity> list2 = tq2.getResultList();
TypedQuery<StudentEntity> tq2 = em.createQuery(select2);
List<StudentEntity> list2 = tq2.getResultList();
System.out.println("Students having age Less than 22");
System.out.print("s_id");
System.out.print("\t s_name");
System.out.println("\t s_age");
System.out.print("\t s_name");
System.out.println("\t s_age");
for (StudentEntity s : list2) {
System.out.print(s.getS_id());
System.out.print("\t" + s.getS_name());
System.out.println("\t" + s.getS_age());
}
System.out.print(s.getS_id());
System.out.print("\t" + s.getS_name());
System.out.println("\t" + s.getS_age());
}
em.getTransaction().commit();
em.close();
emf.close();
em.close();
emf.close();
8.JPQL Between条件
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.getTransaction().begin();
CriteriaBuilder cb = em.getCriteriaBuilder();
AbstractQuery<StudentEntity> cq = cb.createQuery(StudentEntity.class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);
cq.where(cb.between(stud.get("s_age"), 22, 26));
CriteriaQuery<StudentEntity> select = ((CriteriaQuery<StudentEntity>) cq).select(stud);
TypedQuery<StudentEntity> tq = em.createQuery(select);
List<StudentEntity> list = tq.getResultList();
CriteriaQuery<StudentEntity> select = ((CriteriaQuery<StudentEntity>) cq).select(stud);
TypedQuery<StudentEntity> tq = em.createQuery(select);
List<StudentEntity> list = tq.getResultList();
System.out.println("Students having age between 22 and 26");
System.out.print("s_id");
System.out.print("\t s_name");
System.out.println("\t s_age");
System.out.print("\t s_name");
System.out.println("\t s_age");
for (StudentEntity s : list) {
System.out.print(s.getS_id());
System.out.print("\t" + s.getS_name());
System.out.println("\t" + s.getS_age());
}
System.out.print(s.getS_id());
System.out.print("\t" + s.getS_name());
System.out.println("\t" + s.getS_age());
}
em.getTransaction().commit();
em.close();
emf.close();
em.close();
emf.close();
9.JPQL Like条件
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.getTransaction().begin();
CriteriaBuilder cb = em.getCriteriaBuilder();
AbstractQuery<StudentEntity> cq = cb.createQuery(StudentEntity.class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);
cq.where(cb.like(stud.get("s_name"), "R%"));
CriteriaQuery<StudentEntity> select = ((CriteriaQuery<StudentEntity>) cq).select(stud);
TypedQuery<StudentEntity> tq = em.createQuery(select);
List<StudentEntity> list = tq.getResultList();
CriteriaQuery<StudentEntity> select = ((CriteriaQuery<StudentEntity>) cq).select(stud);
TypedQuery<StudentEntity> tq = em.createQuery(select);
List<StudentEntity> list = tq.getResultList();
System.out.println("Students name starting with R");
System.out.print("s_id");
System.out.print("\t s_name");
System.out.println("\t s_age");
System.out.print("\t s_name");
System.out.println("\t s_age");
for (StudentEntity s : list) {
System.out.print(s.getS_id());
System.out.print("\t" + s.getS_name());
System.out.println("\t" + s.getS_age());
}
em.getTransaction().commit();
em.close();
emf.close();
System.out.print(s.getS_id());
System.out.print("\t" + s.getS_name());
System.out.println("\t" + s.getS_age());
}
em.getTransaction().commit();
em.close();
emf.close();
10.JPQL In条件
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.getTransaction().begin();
CriteriaBuilder cb = em.getCriteriaBuilder();
AbstractQuery<StudentEntity> cq = cb.createQuery(StudentEntity.class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);
cq.where(cb.in(stud.get("s_age")).value(22).value(24));
CriteriaQuery<StudentEntity> select = ((CriteriaQuery<StudentEntity>) cq).select(stud);
TypedQuery<StudentEntity> tq = em.createQuery(select);
List<StudentEntity> list = tq.getResultList();
CriteriaQuery<StudentEntity> select = ((CriteriaQuery<StudentEntity>) cq).select(stud);
TypedQuery<StudentEntity> tq = em.createQuery(select);
List<StudentEntity> list = tq.getResultList();
System.out.println("Students having age 22 and 24");
System.out.print("s_id");
System.out.print("\t s_name");
System.out.println("\t s_age");
System.out.print("\t s_name");
System.out.println("\t s_age");
for (StudentEntity s : list) {
System.out.print(s.getS_id());
System.out.print("\t" + s.getS_name());
System.out.println("\t" + s.getS_age());
}
System.out.print(s.getS_id());
System.out.print("\t" + s.getS_name());
System.out.println("\t" + s.getS_age());
}
em.getTransaction().commit();
em.close();
emf.close();
em.close();
emf.close();
11.标准GROUP BY示例
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.getTransaction().begin();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Object[]> cq = cb.createQuery(Object[].class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);
cq.multiselect(stud.get("s_age"), cb.count(stud)).groupBy(stud.get("s_age"));
CriteriaQuery<Object[]> cq = cb.createQuery(Object[].class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);
cq.multiselect(stud.get("s_age"), cb.count(stud)).groupBy(stud.get("s_age"));
System.out.print("s_age");
System.out.println("\t Count");
List<Object[]> list = em.createQuery(cq).getResultList();
for (Object[] object : list) {
System.out.println(object[0] + " " + object[1]);
System.out.println("\t Count");
List<Object[]> list = em.createQuery(cq).getResultList();
for (Object[] object : list) {
System.out.println(object[0] + " " + object[1]);
}
em.getTransaction().commit();
em.close();
emf.close();
em.close();
emf.close();
12.标准Having示例
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.getTransaction().begin();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Object[]> cq = cb.createQuery(Object[].class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);
CriteriaQuery<Object[]> cq = cb.createQuery(Object[].class);
Root<StudentEntity> stud = cq.from(StudentEntity.class);
cq.multiselect(stud.get("s_age"), cb.count(stud)).groupBy(stud.get("s_age"))
.having(cb.ge(stud.get("s_age"), 24));
.having(cb.ge(stud.get("s_age"), 24));
System.out.print("s_age");
System.out.println("\t Count");
List<Object[]> list = em.createQuery(cq).getResultList();
for (Object[] object : list) {
System.out.println(object[0] + " " + object[1]);
System.out.println("\t Count");
List<Object[]> list = em.createQuery(cq).getResultList();
for (Object[] object : list) {
System.out.println(object[0] + " " + object[1]);
}
em.getTransaction().commit();
em.close();
emf.close();
em.close();
emf.close();
学习来源:https://www.yiibai.com/jpa/jpa-criteria-api-introduction.html#article-start

浙公网安备 33010602011771号