JPA(Java Persistence API)学习十六(JPQL基本操作)

1.概述

   JPQL允许我们创建静态和动态查询。 现在,我们将在下表中使用这两种查询来执行一些基本的JPQL操作。

 

2.JPQL动态查询示例

   第一步:创建实体类StudentEntity

        import javax.persistence.*;

          @Entity
          @Table(name = "student")
         public class StudentEntity {
               @Id
               private int s_id;
               private String s_name;
               private int s_age;
          }
    第二步:配置xml
         <?xml version="1.0" encoding="UTF-8"?>
         <persistence version="2.1"
               xmlns="http://xmlns.jcp.org/xml/ns/persistence"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
                      http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
               <persistence-unit name="Student_details">
                       <class>com.yiibai.jpa.StudentEntity</class> 
                      <properties>
                           <property name="javax.persistence.jdbc.driver"
                                      value="com.mysql.jdbc.Driver" />
                           <property name="javax.persistence.jdbc.url"
                                      value="jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC" />
                           <property name="javax.persistence.jdbc.user" value="root" />
                           <property name="javax.persistence.jdbc.password"
                                      value="123456" />
                           <property name="eclipselink.logging.level" value="SEVERE" />
                           <property name="eclipselink.ddl-generation"
                                      value="create-or-extend-tables" />
                    </properties>
                </persistence-unit>
           </persistence>
 
     第三步:执行
           EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
           EntityManager em = emf.createEntityManager();
            em.getTransaction().begin();
            Query query = em.createQuery("Select s.s_name from StudentEntity s");
            @SuppressWarnings("unchecked")
             List<String> list = query.getResultList();
             System.out.println("Student Name :");
             for (String s : list) {
                     System.out.println(s);
             }
 
2.JPQL静态查询示例
   使用createNamedQuery()方法从数据库中获取单个列的值。
    第一步:创建StudentEntity.java,加上静态查询@NamedQuery
          import javax.persistence.*;
          @Entity
          @Table(name = "student")
          @NamedQuery(name = "find name", query = "Select s from StudentEntity s")
          public class StudentEntity {
               @Id
               private int s_id;
               private String s_name;
               private int s_age;
           }
      第二步:执行(这里是默认已经配置了外部元数据)
          EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
          EntityManager em = emf.createEntityManager();
          em.getTransaction().begin();
          Query query = em.createNamedQuery("find name");
          @SuppressWarnings("unchecked")
           List<StudentEntity> list = query.getResultList();
           System.out.println("Student Name :");
           for (StudentEntity s : list) {
                  System.out.println(s.getS_name());
            }
           em.close();
           emf.close();
 
3.JPQL批量查詢
   第一步:创建一个名为StudentEntity.java的实体类
   第二步:创建xml文件
   第三步:执行
          EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
         EntityManager em = emf.createEntityManager();
         em.getTransaction().begin();
         Query query = em.createQuery("Select s from StudentEntity s ");
         @SuppressWarnings("unchecked")
          List<StudentEntity> list = (List<StudentEntity>) query.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.print("\t" + s.getS_age());
               System.out.println();
             }
          em.getTransaction().commit();
          em.close();
          emf.close();
   
4.JPQL更新记录
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
     EntityManager em = emf.createEntityManager();
     em.getTransaction().begin();
     Query query = em.createQuery("update StudentEntity SET s_age=25 where s_id>103");
     query.executeUpdate();
     em.getTransaction().commit();
     em.close();
     emf.close();
 
5.JPQL删除记录
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    Query query = em.createQuery("delete from StudentEntity where s_id=102");
    query.executeUpdate();
    em.getTransaction().commit();
    em.close();
    emf.close();
   
6.JPQL高级查询
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    Query q1 = em.createQuery("Select s from StudentEntity s where s.s_age between 22 and 28");
    @SuppressWarnings("unchecked")
    List<StudentEntity> l1 = (List<StudentEntity>) q1.getResultList();
    System.out.println("Between Clause");
    System.out.print("s_id");
    System.out.print("\t s_name");
    System.out.println("\t s_age");
    for (StudentEntity s : l1) {
        System.out.print(s.getS_id());
        System.out.print("\t" + s.getS_name());
        System.out.println("\t" + s.getS_age());
    }
    Query q2 = em.createQuery("Select s from StudentEntity s where s.s_age IN(20,22,23)");
    @SuppressWarnings("unchecked")
    List<StudentEntity> l2 = (List<StudentEntity>) q2.getResultList();
    System.out.println("IN Clause");
    System.out.print("s_id");
    System.out.print("\t s_name");
    System.out.println("\t s_age");
    for (StudentEntity s : l2) {
        System.out.print(s.getS_id());
        System.out.print("\t" + s.getS_name());
        System.out.println("\t" + s.getS_age());
    }
    Query q3 = em.createQuery("Select s from StudentEntity s where s.s_name like '%a%'");
    @SuppressWarnings("unchecked")
    List<StudentEntity> l3 = (List<StudentEntity>) q3.getResultList();
    System.out.println("Like Clause");
    System.out.print("s_id");
    System.out.print("\t s_name");
    System.out.println("\t s_age");
    for (StudentEntity s : l3) {
        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.JPQL聚合
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    Query q1 = em.createQuery("Select count(s) from StudentEntity s");
    System.out.println("Number of Student : " + q1.getSingleResult());
    Query q2 = em.createQuery("Select MAX(s.s_age) from StudentEntity s");
    System.out.println("Maximum age : " + q2.getSingleResult());
    Query q3 = em.createQuery("Select MIN(s.s_age) from StudentEntity s");
    System.out.println("Minimum age : " + q3.getSingleResult());
    em.getTransaction().commit();
    em.close();
    emf.close();
 
8.JPQL排序
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    Query q1 = em.createQuery("Select s from StudentEntity s order by s.s_age desc");
    @SuppressWarnings("unchecked")
    List<StudentEntity> l1 = (List<StudentEntity>) q1.getResultList();
    System.out.print("s_id");
    System.out.print("\t s_name");
    System.out.println("\t s_age");
    for (StudentEntity s : l1) {
        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();
 
 
学习来源:https://www.yiibai.com/jpa/jpa-jpql-bulk-data-operations.html#article-start
           
posted @ 2020-09-09 16:16  小窝蜗  阅读(307)  评论(0)    收藏  举报