Criteria對SQL進行封裝,讓開發人員可以用物件的方式來對資料庫進行操作,例如下面的查詢User表格中的所有資料:
// 查詢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());
}
criteria.add(Restrictions.gt("age", new Integer(20)));
criteria.add(Restrictions.lt("age", new Integer(40)));
List users = criteria.list();
criteria.add(Restrictions.or(
Restrictions.eq("age", new Integer(20)),
Restrictions.isNull("age")
));
List users = criteria.list();
criteria.add(Restrictions.sqlRestriction("{alias}.name LIKE (?)", "cater%", Hibernate.STRING));
List users = criteria.list();
Integer[] ages = {new Integer(20), new Integer(40)};
Type[] types = {Hibernate.INTEGER, Hibernate.INTEGER};
criteria.add(Restrictions.sqlRestriction("{alias}.age BETWEEN (?) AND (?)", ages, types));
List users = criteria.list();
方法 | 說明 |
Restrictions.eq | 等於 |
Restrictions.allEq | 使用Map,使用key/value進行多個等於的比對 |
Restrictions.gt | 大於 > |
Restrictions.ge | 大於等於 >= |
Restrictions.lt | 小於 < |
Restrictions.le | 小於等於 <= |
Restrictions.between | 對應SQL的BETWEEN子句 |
Restrictions.like | 對應SQL的LIKE子句 |
Restrictions.in | 對應SQL的in子句 |
Restrictions.and | and關係 |
Restrictions.or | or關係 |
Restrictions.sqlRestriction | SQL限定查詢 |
==============
前面讲了Criteria看起来比HQL顺眼多了,接着继续。如果每个美女都有自己的客户资源(不要想歪了!),那么需要查询拥有客户Gates的美女怎么办?使用Criteria可以有两种方法:1:DetachedCriteria beautyCriteria = DetachedCriteria.forClass(Beauty.class).createCriteria("customers");beautyCriteria.add(Restrictions.eq("name", "Gates")):2:DetachedCriteria beautyCriteria = DetachedCriteria.forClass(Beauty.class).createAlias("customers", "c");beautyCriteria.add(Restrictions.eq("c.name", "Gates")):接着有了新的要求,年纪太大的美女不要,还是查找拥有客户Gates的,条件如下:DetachedCriteria beautyCriteria = DetachedCriteria.forClass(Beauty.class, "b").;DetachedCriteria customerCriteria = beautyCriteria.createAlias("customers", c");beautyCriteria.add(Restrictions.le("b.age", new Long(20))):customerCriteria.add(Restrictions.eq("c.name", "Gates")):关于Criteria更详细的资料,Hibernate的源代码和测试是最好的文档。