Criteria Query 可以看作傳統sql的對象化表示。
Criteria 可以由session創建。
Criteria ct= session.createCriteria(TUser.class);
先來一段小Demo:
TbItemParamExample example = new TbItemParamExample();
Criteria criteria = example.createCriteria();
criteria.andItemCatIdEqualTo(cid);
Criteria中可以增加查詢條件
ct.add(Expression.eq("name","Erica"));
ct.add(Expression.eq("sex",new Integer(1)));
Criteria中增加的查詢條件可以由表達式對象創建
Expression.eq(對象屬性名,對象屬性值);
查詢條件通過Criteria的add方法加入。
表達式對象的方法有:
-
eq 等於,第一個參數是對象屬性,第二個參數是值
-
allEq 參數為一個Map對象,相當於多個eq的疊加
-
gt 大於
-
ge 大於等於
-
lt <
-
le <=
-
between 在兩個值之間Expression.between("age",new Integer(10),new Integer(20));
-
like like查詢
-
in in查詢
-
eqProperty 用於比較兩個對象的屬性的值是否相等
-
gtProperty
-
geProperty
-
ltProperty
-
leProperty
-
and and方法可以嵌套Expression對象,用於and關系
-
or 同上
Expression.or( Expression.eq("name","hulei"), Expression.eq("name","jane") );
sql 作為Expression對象的補充,本方法提供對原生sql的支持。注意,在Hibernate3中,引入了Restrictions類作為Expression的替代,以后的版本,不再推薦使用Expression。
但是,Restrictions類的使用方法和Expression的方法一致。注意,在查詢條件中,Hibernate提供了一個Example查詢,當查詢條件比較多的時候,可以用Example查詢來簡化代碼,使用方法如下:
TUser user=new TUser();
user.setLoginName("hulei");
user.setPassword("hulei");
Criteria ct=session.createCriteria(TUser.class);
ct.add(Example.create(user));
return ct.list();
復合查詢
Criteria查詢可以嵌套Criteria來實現復合查詢
如下:
Criteria ct=session.createCriteria(TUser.class);
Criteria ctAddress=ct.createCriteria("addresses");//這里是嵌套了一個Criteria查詢,這里的addresses是TUser的屬性
ctAddress.add(Expression.like("address","%shanghai%"));
List list=ct.list();