qbc就是query by criteria 。qbc是hibernate提供的幾種檢索方式之一。
(一)這裡先小做乙個總結:hibernate檢索物件的方式有哪些呢?
(1)導航物件圖檢索方式。根據已經載入的物件,導航到其他物件。比如:對於已經載入的班級物件class1.呼叫它的getstudents()方法,就可以導航到所有關聯的student物件。
(2)oid檢索方式。根據物件的oid來檢索物件,session的get()和load()方法提供了這種功能。如果在應用程式中事先知道了oid,就可以使用這種檢索物件的方式。
(3)hql檢索方式。這種方法大家一定不陌生。我們使用hibernate提供的query介面,能夠執行各種複雜的的hql查詢語句。
(4)本地sql檢索方式。使用sql語句查詢,hibernate負責把檢索到的jdbc resultset結果集對映為持久化物件圖。
(5)qbc檢索方式,就是本篇部落格要介紹的。
(二)qbc主要由org.hibernate.criteria介面、org.hibernate.criterion.criterion介面和org.hibernate.criterion.restrictions類組成,支援執行時動態生成查詢語句。
我們先看一段我寫過的一段**:
/**
* 多條件查詢月報問題列表 wyj2023年6月23日
* @param page coordinate分頁實體
* @param entity
* @param userid 使用者id
* @param tabstatus
* @param reportdatestr 月報日期
* @param objarray
* @param deptid 部門id
* @status 辦理狀態;未分配職責部門,在辦,建議辦結,辦結和退回
* @return coordinate分頁實體
*/public pagegetobjectsbyconditions(pagepage, coordinate entity,
string userid, string tabstatus,string reportdatestr,object objarray,long deptid,string status,boolean flag)
if(null!=entity.getreporter() && entity.getreporter().trim().length()>0 )
if (null!=entity.getcontent() && entity.getcontent().trim().length()>0)
//篩選的發布時間
if(null != reportdatestr && reportdatestr.trim().length()>0 )
//增加判斷條件status.如果為0,查詢所有為分配職責部門的記錄 wyj 2023年6月23日
if(null != status && status.trim().length()>0)
if(null != deptid && deptid >0)else
}return dao.findbycriteria(page, critera);
}
根據這段**總結一下qbc檢索方式包括以下步驟:
(1)呼叫session介面的createcriteria()方法建立乙個criteria物件。
(2) 設定查詢條件。restrictions類提供了一系列用於設定查詢條件的靜態方法,這些方法都返回criterion例項,每個criterion例項代表乙個查詢條件。criteria介面的add()方法用於加入查詢條件。
我列舉幾個最最常用的restrictions方法:
restrictions.between --> 對應sql的between子句
restrictions.like --> 對應sql的like子句
restrictions.in --> 對應sql的in子句
restrictions.eq --> equal,等於.
同一類得還有(以下四個)
restrictions.gt --> great-than > 大於
restrictions.ge --> great-equal >= 大於等於
restrictions.lt --> less-than, < 小於
restrictions.le --> less-equal <= 小於等於
(3)呼叫criteria介面的list()方法執行查詢語句。該方法返回list型別的查詢結果。
除此之外,criteria物件可以對查詢結果排序。採用order類。如下:
criteria.addorder(order.asc("name"));
criteria.addorder(order.desc("age"));
還可以支援分頁查詢。如下:
criteria.setfirstresult(2);
criteria.setmaxresults(5);
如果記錄集中有5條資料,那麼可以查詢出2.3.4.5條資料。
總結:qbc的功能不是特別強大,僅在某些場合下有用。乙個典型的使用場合就是在查詢視窗中讓使用者輸入一系列的查詢條件。然後返回匹配的物件。如果採用hql,必須建立冗長的字串形式的hql查詢語句。
而且qbc查詢可以使**更加簡潔,更容易上手。
Hiberante中LAZY的疑惑
使用者user與role,resource關聯都是lazy,而使用spring security時,使用者登陸成功需要預先取得user的所有許可權資源,專案的寫法是 listuserlist userdao.find select distinct u from user u left join f...
hiberante中get和load方法的區別
1.從返回結果上對比 load方式檢索不到的話會丟擲org.hibernate.objectnotfoundexception異常 get方法檢索不到的話會返回null 2.從檢索執行機制上對比 get方法和find方法都是直接從資料庫中檢索 而load方法的執行則比較複雜首先查詢session的p...
hibernate中的HQL和QBC查詢
1.讀取src下hibernate.cfg.xml配置檔案 configuration cft new configuration configuration configure cft.configure 2.建立sessionfactory工廠 sessionfactory sessionfac...