hibernate學習(4)
Hibernate查詢方式
1 物件導航查詢
(1)根據id查詢某個客戶,再查詢這個客戶裡面所有的聯絡人
2 OID查詢
(1)根據id查詢某一條記錄,返回物件
3 hql查詢
(1)Query物件,寫hql語句實現查詢
4 QBC查詢
(1)Criteria物件
5 本地sql查詢
(1)SQLQuery物件,使用普通sql實現查詢
重點掌握前四種方式。
物件導航查詢
1 查詢某個客戶裡面所有聯絡人過程,使用物件導航實現
2 程式碼
//根據cid=1客戶,再查詢這個客戶裡面所有聯絡人 Customer customer = session.get(Customer.class, 1); //再查詢這個客戶裡面所有聯絡人 //直接得到客戶裡面聯絡人的set集合 Set<LinkMan> linkman = customer.getSetLinkMan(); System.out.println(linkman.size());
OID查詢
1 根據id查詢記錄
(1)呼叫session裡面的get方法實現
//根據cid=1客戶,再查詢這個客戶裡面所有聯絡人 Customer customer = session.get(Customer.class, 1);
HQL查詢
1 hql:hibernate query language,hibernate提供一種查詢語言,hql語言和普通sql很相似,最大的區別是:普通sql操作資料庫表和欄位,hql操作實體類和屬性。
2 常用hql語句
(1)查詢所有:from 實體類名稱
(2)條件查詢:from 實體類名稱 where 屬性名稱=?
(3)排序查詢:from 實體類名稱 order by 實體類屬性名稱 asc/desc
3 使用hql查詢操作的時候,使用Query物件
(1)建立Query物件,寫hql語句
(2)呼叫query物件裡面的方法得到結果
查詢所有
1 查詢所有客戶記錄
(1)建立Query物件,寫hql語句
(2)呼叫query物件裡面的方法得到結果
2 查詢所有:from實體類名稱
//1 建立query物件 Query query = session.createQuery("from Customer"); //2 呼叫方法得到結果 List<Customer> list = query.list();
條件查詢
1 hql條件查詢語句寫法
(1)from 實體類名稱 where 實體類名稱=?and 實體類屬性名稱=?
from 實體類名稱 where 實體類屬性名稱 like ?
2 程式碼
使用的方法是:
query.setParameter(arg0, arg1);
// 1 建立query物件 // select * from t_customer where cid=? and custName=? Query query = session.createQuery("from Customer where cid=? and custName=?"); // 2 設定條件值 // 向?裡面設定值 // setParameter方法兩個引數 // 第一個引數:int型別是?位置,?位置從0開始 // 第二個引數:具體引數值 // 設定第一個引數值?和preparedstatement不一樣的是,它是從0開始的 query.setParameter(0, 4); // 設定第二個?值 query.setParameter(1, "baidu"); // 3 呼叫方法的到結果 List<Customer> list = query.list();
模糊查詢
// 1 建立query物件 // select * from t_customer where cid=? and custName=? Query query = session.createQuery("from Customer where cid=? and custName like ?"); //2 設定?的值 //_na %na% query.setParameter(0, 2); query.setParameter(1, "%in%"); //3 呼叫方法得到結果 List<Customer> list = query.list();
hibernate底層sql程式碼
Hibernate: select customer0_.cid as cid1_0_, customer0_.custName as custName2_0_, customer0_.custLevel as custLeve3_0_, customer0_.custSource as custSour4_0_, customer0_.custPhone as custPhon5_0_, customer0_.custMobile as custMobi6_0_ from t_customer customer0_ where customer0_.cid=? and ( customer0_.custName like ? )
排序查詢
1 hql排序語句寫法
(1)from 實體類名稱 order by 實體類屬性名稱 asc/desc
// 1 建立query物件 Query query = session.createQuery("from Customer order by cid asc"); //2 呼叫方法得到結果 List<Customer> list = query.list();
分頁查詢
1 mysql實現分頁
(1)使用關鍵字limit實現
select * from t_customer limit 0,2;
第一個引數是開始位置,第二個引數是每頁顯示幾條記錄。
2 在hql中實現分頁
(1)在hql操作中,在語句裡面不能寫limit(這是MySQL特有,Hibernate不認識),hibernate的Query物件封裝兩個方法實現分頁操作。
// 1 建立query物件 Query query = session.createQuery("from Customer"); // 2 設定分頁資料 // 2.1 設定開始位置 query.setFirstResult(0); // 2.2 設定每頁記錄數 query.setMaxResults(2); // 3 呼叫方法得到結果 List<Customer> list = query.list();
投影查詢
1 投影查詢
聚集函式使用