Hibernate的批量查詢
阿新 • • 發佈:2018-07-24
public rst 單個 try 類名 session first color 根據
Hibernate的查詢大致分為以下三種場景,
1. HQL查詢-hibernate Query Language(多表查詢,但不復雜時使用)
2. Criteria查詢(單表條件查詢)
3. 原生SQL查詢(復雜的業務查詢)
接下來解釋三種使用方法:
1.HQL查詢-hibernate Query Language(多表查詢,但不復雜時使用) Hibernate獨家查詢語言,屬於面向對象的查詢語言
註意:HQL語言中不會出現SQL中的表和列,HQL使用的都是JavaBean的類名和屬性名。
1.HQL基本查詢
(1)查詢所有的基本語句
@Test // HQL查詢所有數據 public void fun1() { // 1 獲得session Session session = HibernateUtil.openSession(); // 2.書寫HQL語句 String hql = "from cn.qlq.domain.Customer";// from 類名全路徑 // 3.根據hql創建查詢對象 Query query = session.createQuery(hql);// 4.根據查詢對象獲取查詢結果 List<Customer> customers = query.list(); System.out.println(customers); }
結果:
Hibernate: select customer0_.cust_id as cust_id1_0_, customer0_.cust_name as cust_nam2_0_, customer0_.cust_source as cust_sou3_0_, customer0_.cust_industryas cust_ind4_0_, customer0_.cust_level as cust_lev5_0_, customer0_.cust_linkman as cust_lin6_0_, customer0_.cust_phone as cust_pho7_0_, customer0_.cust_mobile as cust_mob8_0_ from cst_customer customer0_ [Customer [cust_id=1, cust_name=XXXXXXXXXX], Customer [cust_id=2, cust_name=聯想]]
改進:如果整個項目中只有一個類的名字可以省略包路徑,也就是可以只寫類名:
@Test // HQL查詢所有數據 public void fun1() { // 1 獲得session Session session = HibernateUtil.openSession(); // 2.書寫HQL語句 // String hql = "from cn.qlq.domain.Customer";// from 類名全路徑 String hql = "from Customer";// 如果整個項目中只有這一個類名可以直接寫名字 // 3.根據hql創建查詢對象 Query query = session.createQuery(hql); // 4.根據查詢對象獲取查詢結果 List<Customer> customers = query.list(); System.out.println(customers); }
(2)根據主鍵查詢單個
@Test // HQL查詢單個數據 public void fun2() { // 1 獲得session Session session = HibernateUtil.openSession(); // 2.書寫HQL語句 // String hql = "from cn.qlq.domain.Customer";// from 類名全路徑 String hql = "from Customer where cust_id = 1";// where後面是Customer的屬性名稱而不是列名 // 3.根據hql創建查詢對象 Query query = session.createQuery(hql); // 4.根據查詢對象獲取查詢結果 Customer customer = (Customer) query.uniqueResult(); System.out.println(customer); }
2.HQL條件查詢:
(1)?占位符查詢
類似於JDBC的占位符,只是hibernate的?下標從0開始,而JDBC的下標從1開始,基本上所有的編程索引都從0開始,唯獨JDBC從1開始。。。。
@Test // HQL的?占位符查詢 public void fun3() { // 1 獲得session Session session = HibernateUtil.openSession(); // 2.書寫HQL語句 // String hql = "from cn.qlq.domain.Customer";// from 類名全路徑 String hql = "from Customer where cust_id = ?";// 如果整個項目中只有這一個類名可以直接寫名字 // 3.根據hql創建查詢對象 Query query = session.createQuery(hql); // query.setLong(0, 1l);//類似於JDBC的占位符,只是JDBC的占位符下標從0開始,hibernate從1開始 query.setParameter(0, 1l);//這種寫法不用管類型 // 4.根據查詢對象獲取查詢結果 Customer customer = (Customer) query.uniqueResult(); System.out.println(customer); }
(2)命令占位符 :name格式的查詢,固定格式,name隨便起,習慣性的起做和條件名字一樣
@Test // HQL的命令占位符查詢 public void fun4() { // 1 獲得session Session session = HibernateUtil.openSession(); // 2.書寫HQL語句 // String hql = "from cn.qlq.domain.Customer";// from 類名全路徑 String hql = "from Customer where cust_id = :cust_id";// :cust_id的名字隨便起,只不過習慣性的起做一樣 // 3.根據hql創建查詢對象 Query query = session.createQuery(hql); // query.setLong(0, 1l);//類似於JDBC的占位符,只是JDBC的占位符下標從0開始,hibernate從1開始 query.setParameter("cust_id",1l); // 4.根據查詢對象獲取查詢結果 Customer customer = (Customer) query.uniqueResult(); System.out.println(customer); }
3.HQL分頁查詢
分頁查詢類似於mysql的limit關鍵字,limit start,pageSize。。。。。。
@Test // HQL分頁查詢 public void fun5() { // 1 獲得session Session session = HibernateUtil.openSession(); // 2.書寫HQL語句 // String hql = "from cn.qlq.domain.Customer";// from 類名全路徑 String hql = "from Customer";// :cust_id的名字隨便起,只不過習慣性的起做一樣 // 3.根據hql創建查詢對象 Query query = session.createQuery(hql); /** * 類似於 limit start,pageSize; * 假設頁大小是2 * 頁號 起始值 頁大小 * 1 0 2 * 2 2 2 */ //例如取第二頁數據 query.setFirstResult(2); query.setMaxResults(2); // 4.根據查詢對象獲取查詢結果 List<Customer> customers = query.list(); System.out.println(customers); }
結果:
Hibernate: select customer0_.cust_id as cust_id1_0_, customer0_.cust_name as cust_nam2_0_, customer0_.cust_source as cust_sou3_0_, customer0_.cust_industry as cust_ind4_0_, customer0_.cust_level as cust_lev5_0_, customer0_.cust_linkman as cust_lin6_0_, customer0_.cust_phone as cust_pho7_0_, customer0_.cust_mobile as cust_mob8_0_ from cst_customer customer0_ limit ?, ? [Customer [cust_id=3, cust_name=博客園], Customer [cust_id=4, cust_name=仍然]]
2.Criteria查詢(單表條件查詢)
Hibernate的批量查詢