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);

 

    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();

 

    System.out.println("s_id");

 

    for (StudentEntity s : list) {
        System.out.println(s.getS_id());

 

    }

 

    em.getTransaction().commit();
    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);
    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();
    System.out.print("s_id");
    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();
 
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);
    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();
    System.out.print("s_id");
    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();
 
7.标准WHERE示例
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    CriteriaBuilder cb = em.getCriteriaBuilder();
    AbstractQuery<StudentEntity> cq1 = 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();
    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");
    for (StudentEntity s : list1) {
        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();
    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");
    for (StudentEntity s : list2) {
        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();
 
8.JPQL Between条件
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
    EntityManager em = emf.createEntityManager();
    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();
    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");
    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();
 
9.JPQL Like条件
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
    EntityManager em = emf.createEntityManager();
    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();
    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");
    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();
 
10.JPQL In条件
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
    EntityManager em = emf.createEntityManager();
    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();
    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");
    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();
 
11.标准GROUP BY示例
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
    EntityManager em = emf.createEntityManager();
    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"));
    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]);
    }
    em.getTransaction().commit();
    em.close();
    emf.close();
 
12.标准Having示例
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
    EntityManager em = emf.createEntityManager();
    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"))
            .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]);
    }
    em.getTransaction().commit();
    em.close();
    emf.close();
 
 
学习来源:https://www.yiibai.com/jpa/jpa-criteria-api-introduction.html#article-start
posted @ 2020-09-09 16:26  小窝蜗  阅读(361)  评论(0)    收藏  举报