日期:2014-05-16  浏览次数:20434 次

Hibernate中DetachedCriteria的使用

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()) {
??? User user = (User) iterator.next();?
??? System.out.println(user.getId() +
?????????????????????????????? " /t " + user.getName() +
?????????????????????????????? "/" + user.getAge());????????????
}

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開頭的資料: