Criteria使用指南

2021-08-29 09:22:25 字數 3268 閱讀 4399

經常用到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...