Criteria Query是Hibernate提供的將SQL語句對象化表示的一種方法。當我們使用JDBC方式查詢數(shù)據(jù)時會這樣寫:
select NAME FROM EMPLOYEE where ID = '001'
使用Hibernate的Criteria Query方式查詢時,就可以使用我們已經(jīng)習慣了的面向?qū)ο蟮姆绞健H缦拢?/font>

程序代碼
import net.sf.hibernate.Criteria;
import net.sf.hibernate.expression.Expression;
...
Criteria criteria = session.createCriteria(Employee.class);
criteria.add(Expression.eq("id", "001"));
ArrayList list = criteria.list();
...
其中Expression對象是where條件的封裝,提供了查詢限定機制,現(xiàn)在介紹一下他的具體使用:
Expression的方法描述
Expression.eq:對應SQL條件中的"field = value"。如:Expression.eq("id","001")
Expression.allEq:參數(shù)為一個Map對象,其中包含了多個屬性和值對應關系。相當于多個Expression.eq關系,多個條件。如:

程序代碼
map.put("id", "001");
map.put("name", "hiswing");
Expression.allEq(map);
Expression.gt:對應SQL條件中的"field > value "。如:Expression.gt("salary", new Integer(5000))
Expression.ge:對應SQL條件中的"field >= value"。
Expression.lt:對應SQL條件中的"field < value"。
Expression.le:對應SQL條件中的"field <= value"。
Expression.between:對應SQL條件中的"between"。
Expression.like:對應SQL條件中的"field like value"。
Expression.in:對應SQL條件中的"field in …"。
Expression.eqProperty:用于比較兩個屬性之間的值,對應SQL條件中的"field = field"。如:Expression.eqProperty("Employee.id", "Group.eid");
Expression.gtProperty:用于比較兩個屬性之間的值,對應SQL條件中的"field > field"。
Expression.geProperty:用于比較兩個屬性之間的值,對應SQL條件中的"field >= field"。
Expression.ltProperty:用于比較兩個屬性之間的值,對應SQL條件中的"field < field"。
Expression.leProperty:用于比較兩個屬性之間的值,對應SQL條件中的"field <= field"。
Expression.and:and關系組合。
如:
Expression.and(
Expression.eq("name","hiswing"),
Expression.eq("sex", new Integer(1))
)
Expression.or:or關系組合。(使用方法同Expression.and)
Expression.sql:我們可以通過這個方法直接通過SQL語句限定查詢條件。
注:在使用Criteria時,Expression中的KEY為POJO中的屬性。如Expression.eq("id", "001")中的id為Employee對象中id這個屬性,注意大小寫。
****************************************************************************************
有很多預制的條件類型(Expression的子類)。有一個特別有用,可以讓你直接嵌入SQL。
List cats = sess.createCriteria(Cat.class)
.add( Expression.sql("lower($alias.name) like lower(?)", "Fritz%", Hibernate.STRING) )
.list();
其中的{alias}是一個占位符,它將會被所查詢實體的行別名所替代.
************************************************************