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