1.配置對象的查詢
實體類: Employee Department Phone Project
實體類之間的關系: 員工和部門 雙向多對一;員工和電話 一對多; 部門和經理 多對一; 員工和項目 多對多;項目和經理 多對一;
2.jpal語句
學JPQL記住兩個點
2.1.JPQL和SQL很像,查詢關鍵字都是一樣的
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(); } }