jpql語句


1.配置對象的查詢

實體類: Employee  Department Phone Project 

實體類之間的關系: 員工和部門  雙向多對一;員工和電話 一對多; 部門和經理 多對一; 員工和項目 多對多;項目和經理 多對一;

 

2.jpal語句

JPQL記住兩個點

2.1.JPQLSQL很像,查詢關鍵字都是一樣的

 2.唯一的區別是:JPQL是面向對象的

2.2. JPQL書寫規則

JPA的查詢語言,類似於sql

 1.里面不能出現表名,列名,只能出現java的類名,屬性名,區分大小寫

 2.出現的sql關鍵字是一樣的意思,不區分大小寫

 3.不能寫select * 要寫select 別名

2.3代碼練習

package cn.itsource.jpa;

import cn.itsource.jpa.domain.Department;
import cn.itsource.jpa.domain.Employee;
import cn.itsource.jpa.domain.Project;
import cn.itsource.jpa.util.JpaUtil;
import org.junit.Test;

import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.lang.reflect.Array;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;

public class JpqlTest {
    @Test
    public void test1()throws Exception{
    //2.2.1.1.1.查詢所有員工【查詢實體類型】
        EntityManager entityManager = JpaUtil.getEntityManager();
        String jpql="select e from Employee e";
        Query query = entityManager.createQuery(jpql);
        List<Employee> resultList = query.getResultList();
        for (Employee employee : resultList) {
            System.out.println(employee);
        }
        entityManager.close();
    }
    //2.2.2.查詢所有員工的姓名和所屬部門名稱【查詢特定屬性】
    @Test
    public void test2()throws Exception{
        EntityManager entityManager = JpaUtil.getEntityManager();
        String jpql="select e.name,e.department.name from Employee e";
        Query query = entityManager.createQuery(jpql);
        List<Object[]> resultList = query.getResultList();
        for (Object[] employee : resultList) {
            System.out.println(Arrays.toString(employee));
        }
        entityManager.close();
    }
    //代碼(SQL中使用對象封裝參數)
    @Test
    public void test3()throws Exception{
        EntityManager entityManager = JpaUtil.getEntityManager();
        String jpql="select new Employee(e.name,e.department.name) from Employee e";
        Query query = entityManager.createQuery(jpql);
        List<Employee> resultList = query.getResultList();
        for (Employee employee : resultList) {
            System.out.println(employee.getName()+"...."+employee.getDepartment().getName());
        }
        entityManager.close();
    }
   // 2.2.3.查詢出所有在成都和廣州工作的員工【查詢結果過濾】
   @Test
   public void test4()throws Exception{
       EntityManager entityManager = JpaUtil.getEntityManager();
       String jpql="select e from Employee e where e.department.city=? or e.department.city=?";
       Query query = entityManager.createQuery(jpql);
       query.setParameter(1, "成都").setParameter(2, "廣州");
       List<Employee> resultList = query.getResultList();
       for (Employee employee : resultList) {
           System.out.println(employee);
       }
       entityManager.close();
   }
   //2.2.4.查詢出所有員工信息,按照月薪排序【查詢排序】
   @Test
   public void test5()throws Exception{
       EntityManager entityManager = JpaUtil.getEntityManager();
       String jpql="select e from Employee e order by e.salary desc ";
       Query query = entityManager.createQuery(jpql);
       List<Employee> resultList = query.getResultList();
       for (Employee employee : resultList) {
           System.out.println(employee);
       }
       entityManager.close();
   }
   //2.2.5.查詢出所有員工信息,按照部門編號排序【使用關聯對象屬性排序】
   @Test
   public void test6()throws Exception{
       EntityManager entityManager = JpaUtil.getEntityManager();
       String jpql="select e from Employee e order by e.department.id desc ";
       Query query = entityManager.createQuery(jpql);
       List<Employee> resultList = query.getResultList();
       for (Employee employee : resultList) {
           System.out.println(employee);
       }
       entityManager.close();
   }
   //2.2.6.查詢出在恩寧路和八寶街上班的員工信息【使用IN】
   @Test
   public void test7()throws Exception{
       EntityManager entityManager = JpaUtil.getEntityManager();
       String jpql="select e from Employee e where e.department.street in(?1,?2)";
       Query query = entityManager.createQuery(jpql);
       query.setParameter(1, "恩寧路").setParameter(2, "八寶街");
       List<Employee> resultList = query.getResultList();
       for (Employee employee : resultList) {
           System.out.println(employee);
       }
       entityManager.close();
   }
   //2.2.7.查詢出工資在5000-6000的員工【使用BETWEEN..AND..】
   @Test
    public void test8()throws Exception{
        EntityManager entityManager = JpaUtil.getEntityManager();
        String jpql="select e from Employee e where  e.salary between :min and :max";
        Query query = entityManager.createQuery(jpql);
        query.setParameter("min", new BigDecimal("5000")).setParameter("max", new BigDecimal("6000"));
        List<Employee> resultList = query.getResultList();
        for (Employee employee : resultList) {
            System.out.println(employee);
        }
        entityManager.close();
    }
   //2.2.8.查詢出姓名包含er或者en的員工【使用LIKE】
   @Test
   public void test9()throws Exception{
       EntityManager entityManager = JpaUtil.getEntityManager();
       String jpql="select e from Employee e where e.name like ? or e.name like ?";
       Query query = entityManager.createQuery(jpql);
       query.setParameter(1, "%er%").setParameter(2,"%en%");
       List<Employee> resultList = query.getResultList();
       for (Employee employee : resultList) {
           System.out.println(employee);
       }
       entityManager.close();
   }
   //2.3.1.查詢出有員工的部門【distinct】
   @Test
   public void test10()throws Exception{
       EntityManager entityManager = JpaUtil.getEntityManager();
       String jpql="select distinct e.department from Employee e ";
       Query query = entityManager.createQuery(jpql);
       List<Department> resultList = query.getResultList();
       for (Department employee : resultList) {
           System.out.println(employee);
       }
       entityManager.close();
   }
   //2.4.1.查詢出有員工的部門【size】//必須配置雙向一對多:部門和員工
   @Test
   public void test11()throws Exception{
       EntityManager entityManager = JpaUtil.getEntityManager();
       String jpql="select e from Department e where e.employees.size>0";
       Query query = entityManager.createQuery(jpql);
       List<Department> resultList = query.getResultList();
       for (Department employee : resultList) {
           System.out.println(employee);
       }
       entityManager.close();
   }
   //2.4.2.查詢出部門信息,按照部門的員工人數排序【使用函數排序】
   @Test
   public void test12()throws Exception{
       EntityManager entityManager = JpaUtil.getEntityManager();
       String jpql="select e from Project e where e.employees.size=0";
       Query query = entityManager.createQuery(jpql);
       List<Project> resultList = query.getResultList();
       for (Project employee : resultList) {
           System.out.println(employee);
       }
       entityManager.close();
   }
   //2.5.1.查詢出所有員工及部門名稱【JOIN/LEFT JOIN】
   @Test
   public void test13()throws Exception{
       EntityManager entityManager = JpaUtil.getEntityManager();
       String jpql="select e,d.name from Employee e left join e.department d";
       Query query = entityManager.createQuery(jpql);
       List<Object[]> resultList = query.getResultList();
       for (Object[] employee : resultList) {
           System.out.println(Arrays.toString(employee));
       }
       entityManager.close();
   }
   //2.5.2.查詢出市場部員工信息及電話
   @Test
   public void test14()throws Exception{
       EntityManager entityManager = JpaUtil.getEntityManager();
       String jpql="select e,o from Phone o  join o.employee e where e.department.name = ?";
       Query query = entityManager.createQuery(jpql);
       query.setParameter(1, "市場部");
       List<Object[]> resultList = query.getResultList();
       for (Object[] employee : resultList) {
           System.out.println(Arrays.toString(employee));
       }
       entityManager.close();
   }
  // 2.6.1.查詢出各個部門員工的平均工資和最高工資【使用聚集函數】
    @Test
    public void test15() throws Exception {
        EntityManager entityManager = JpaUtil.getEntityManager();
        String jpql = "select avg(o.salary),max(o.salary) from Employee o group by o.department.name";
        Query query = entityManager.createQuery(jpql);
        List<Object[]> list = query.getResultList();
        for (Object[] objects : list) {
            System.out.println(Arrays.toString(objects));
        }
       // System.out.println("size:" + list.size());
        entityManager.close();
    }
    //2.6.2.查詢出各個項目參與人數報表
    @Test
    public void test16() throws Exception {
        EntityManager entityManager = JpaUtil.getEntityManager();
        String jpql = "select o.name,o.employees.size from Project o where o.employees.size>0";
        Query query = entityManager.createQuery(jpql);
        List<Object[]> list = query.getResultList();
        for (Object[] objects : list) {
            System.out.println(Arrays.toString(objects));
        }
        // System.out.println("size:" + list.size());
        entityManager.close();
    }
    //查出大於平均工資的人數
    @Test
    public void test17() throws Exception {
        EntityManager entityManager = JpaUtil.getEntityManager();
        String jpql = "select o from Employee o where o.salary>(select avg(salary) from Employee)";
        Query query = entityManager.createQuery(jpql);
        List<Employee> list = query.getResultList();
        for (Employee objects : list) {
            System.out.println(objects);
        }
        // System.out.println("size:" + list.size());
        entityManager.close();
    }
    //3.1.獲取分頁數據
    @Test
    public void test18() throws Exception {
        int currentPage = 2;
        int pageSize = 6;
        EntityManager entityManager = JpaUtil.getEntityManager();
        String jpql = "select o from Employee o";
        Query query = entityManager.createQuery(jpql);
        // 從那里開始取數據,索引從0開始
        int firstResult = (currentPage - 1) * pageSize;
        // 取多少條
        int maxResults = pageSize;
        query.setFirstResult(firstResult).setMaxResults(maxResults);
        List<Employee> list = query.getResultList();
        for (Employee employee : list) {
            System.out.println(employee);
        }
        System.out.println("size:" + list.size());
        entityManager.close();
    }
    //3.3.獲取記錄總數,返回類型是Long
    @Test
    public void test19() throws Exception {
        EntityManager entityManager = JpaUtil.getEntityManager();
        String jpql = "select count(o) from Employee o";
        Query query = entityManager.createQuery(jpql);
        Long result = (Long) query.getSingleResult();
        System.out.println("size:" + result);
        entityManager.close();
    }
    @Test
    public void test20() throws Exception {
        EntityManager entityManager = JpaUtil.getEntityManager();
        String sql = "select * from employee";
        // 告訴hibernate把employee表轉換為Employee對象
        Query query = entityManager.createNativeQuery(sql, Employee.class);
        List<Employee> list = query.getResultList();
        query.setFirstResult(3).setMaxResults(3);
        for (Employee employee : list) {
            System.out.println(employee);
        }
        System.out.println("size:" + list.size());
        entityManager.close();
    }
    //"%en%名字
    @Test
    public void test22() throws Exception {
        EntityManager entityManager = JpaUtil.getEntityManager();
        String sql = "select * from employee where name like ? order by salary desc";
        Query query = entityManager.createNativeQuery(sql, Employee.class);
        query.setParameter(1, "%en%");
        List<Employee> list = query.getResultList();
        for (Employee employee : list) {
            System.out.println(employee);
        }
        System.out.println("size:" + list.size());
        entityManager.close();
    }


}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM