Criteria 查詢(xún)
Hibernate支持一種符合Java撰寫(xiě)習慣的查詢(xún)API,使用Session建立一個(gè)net.sf.hibernate.Criteria,您可以在不使用SQL甚至HQL的情況下進(jìn)行對數據庫的查詢(xún)。
我們以之前所練習過(guò)的第一個(gè)Hibernate程序完成的結果為例:
入門(mén) 02 - 第一個(gè)Hibernate程序
如果要使用Criteria來(lái)查詢(xún)所有的User數據,則如下撰寫(xiě):
Criteria crit = session.createCriteria(User.class);
List users = crit.list();
for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) {
User user = (User) iterator.next();
System.out.println("name: " + user.getName());
System.out.println("age: " + user.getAge());
}
如果我們要為查詢(xún)限定條件,則可以透過(guò)net.sf.hibernate.expression.Expression設定查詢(xún)條件,Expression擁有許多條件查詢(xún)方法,舉個(gè)實(shí)際的例子說(shuō)明:
Criteria crit = session.createCriteria(User.class);
crit.add(Expression.ge("age", new Integer(25)));
List users = crit.list();
Expression的ge()方法即great-equal,也就是大于等于(>=),在上例中我們設定查詢(xún)age屬性大于等于25的User數據。
您也可以設定多個(gè)查詢(xún)條件,例如:
crit.add(Expression.gt("age", new Integer(20)));
crit.add(Expression.between("weight", new Integer(60),new Integer(80)));
List users = crit.list();
上例中我們查詢(xún)age大于20,而weight介于60到80之間的User。
您也可以使用邏輯組合來(lái)進(jìn)行查詢(xún),例如:
crit.add(Expression.or(
Expression.eq("age", new Integer(20)),
Expression.isNull("age")
));
List users = crit.list();
如果要對結果進(jìn)行排序,可以使用net.sf.hibernate.expression.Order,例如:
List cats = session.createCriteria(User.class)
.add(Expression.ge("age", new Integer(20));
.addOrder( Order.asc("name") )
.addOrder( Order.desc("age") )
.setMaxResults(50)
.list();
setMaxResults()方法可以限定查詢(xún)回來(lái)的筆數,如果配合setFirstResult()設定傳回查詢(xún)結果第一筆數據的位置,就可以實(shí)現簡(jiǎn)單的分頁(yè),例如:
Criteria crit = session.createCriteria(User.class);
crit.setFirstResult(51);
crit.setMaxResult(50);
List users = crit.list();
上面的例子將傳回第51筆之后的資料(51到100)。
實(shí)際上,Criteria、Expression、Order等是對SQL進(jìn)行了封裝,讓Java程序設計人員可以用自已習慣的語(yǔ)法來(lái)撰寫(xiě)查詢(xún),而不用使用HQL或SQL(有興趣的話(huà),可以在組態(tài)文件中設定顯示SQL,看看對應的SQL),然而Criteria在Hibernate中功能還不是很完美,只能實(shí)現一些較為簡(jiǎn)單的查詢(xún),對于查詢(xún),Hibernate仍鼓勵使用HQL作為查詢(xún)的首選方式。
Criteria的使用相當簡(jiǎn)單,這邊只介紹一些基本,有興趣的話(huà),在Hibernate參考手冊的第12章中介紹有更多的查詢(xún)方式。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。