經常用到criteria,所以做一下總結
net.sf.hibernate.criteria這個介面代表對乙個特定的持久化類的查詢。session是用來製造criteria例項的工廠。
criteria對sql進行封裝,讓開發人員可以用物件的方式來對資料庫進行操作,例如下面的查詢user**中的所有資料:
criteria criteria = session.createcriteria(user.class);
// 查詢user所有字段
list users = criteria.list();
iterator iterator = users.iterator();
system.out.println("id \t name/age");
while(iterator.hasnext())
hibernate實際上使用以下的sql來查詢資料庫:
select this_.id as id0_, this_.name as name0_0_, this_.age as age0_0_ from user this_
criteria實際上只是個容器,如果想要設定查詢條件,則要使用add()方法加入restrictions的條件限制,例如查詢age大於20且小於40的資料:
criteria criteria = session.createcriteria(user.class);
criteria.add(restrictions.gt("age", new integer(20)));
criteria.add(restrictions.lt("age", new integer(40)));
list users = criteria.list();
您也可以使用邏輯組合來進行查詢,例如結合age等於(eq)20或(or)age為空(isnull)的條件:
criteria criteria = session.createcriteria(user.class);
criteria.add(restrictions.or(
restrictions.eq("age", new integer(20)),
restrictions.isnull("age")
));
list users = criteria.list();
也可以使用sqlrestriction()方法來提供sql語法作限定查詢,例如查詢name以cater開頭的資料:
criteria criteria = session.createcriteria(user.class);
criteria.add(restrictions.sqlrestriction(".name like (?)", "cater%", hibernate.string));
list users = criteria.list();
其中alias將被替換為與user類別相關的名稱,而?將被替換為cater%,也就是第二個引數所提供的值,在sql撰寫時,不必再寫where,如果有多個查詢條件,例如between子句的查詢,則可以如下:
criteria criteria = session.createcriteria(user.class);
integer ages = ;
type types = ;
criteria.add(restrictions.sqlrestriction(".age between (?) and (?)", ages, types));
list users = criteria.list();
restrictions的幾個常用限定查詢方法如下表所示:
方法說明
restrictions.eq
等於restrictions.alleq
使用map,使用key/value進行多個等於的比對
restrictions.gt
大於 >
restrictions.ge
大於等於 >=
restrictions.lt
小於 <
restrictions.le
小於等於 <=
restrictions.between
對應sql的between子句
restrictions.like
對應sql的like子句
restrictions.in
對應sql的in子句
restrictions.and
and關係
restrictions.or
or關係
restrictions.sqlrestriction
sql限定查詢
criteria高階特性限定返回的記錄範圍
通過criteria. setfirstresult/setmaxresults 方法可以限制一次查詢返回的記錄範圍:
criteria criteria = session.createcriteria(user.class);
//限定查詢返回檢索結果中,從第一百條結果開始的20條記錄
criteria.setfirstresult(100);
criteria.setmaxresults(20);
對查詢結果進行排序
//查詢所有groupid=2的記錄
//並分別按照姓名(順序)和groupid(逆序)排序
criteria criteria = session.createcriteria(tuser.class);
criteria.add(expression.eq(
"groupid"
,newinteger(2)));
criteria.addorder(order.asc(
"name"
)); criteria.addorder(order.desc(
"groupid"
));
進行復合查詢示例:
logicalexpression subcriteria = expression.or(expression.ilike("name", searchtxt, matchmode.anywhere),
expression.ilike("description", searchtxt, matchmode.anywhere));
criteria.add(subcriteria );
Ubuntu apt 使用指南
起初gnu linux系統中只有.tar.gz。使用者必須自己編譯他們想使用的每乙個程式。在debian出現之後,人們認為有必要在系統中新增 一種機制用來管理安裝在計算機上的軟體包。人們將這套系統稱為dpkg。至此著名的 package 首次在gnu linux上出現。不久之後紅帽子也 開始著手建立...
CImageList使用指南
1.綜述 在mfc 中cimagelist 類封裝了 影象列表控制項的功能,影象列表是乙個具有相同大小的 影象 可以是不同 型別 的集合,其主要用於 應用程式中大規模 圖示的儲存。該控制項是不可 見的,通常與其它如 clistbox ccombobox ccomboboxex ctabctrl 以及...
CImageList使用指南
cimagelist使用指南 1.綜述 在 mfc中cimagelist類封裝了影象列表控制項的功能,影象列表是乙個具有相同大小的影象 可以是不同型別 的集合,其主要用於應用程式中大 規模圖示的儲存,該控制項是不可見的。通常與其它如clistbox,ccombobox,ccomboboxex以及ct...