对于Hibernate3中的DetacheCriteria的使用


原文地址在这:http://blog.csdn.net/zhaozhen1984/article/details/5793722


使用detachedCriteria时,很多时候需要参考下面的资料:

先说排序: detachedCriteria.addOrder(Order.desc(properyName));

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

Criteria criteria = session.createCriteria(User.class); 
criteria.add(Restrictions.sqlRestriction("{alias}.name LIKE (?)", "cater%", Hibernate.STRING)); 
List users = criteria.list();


其中alias將被替換為與User類別相關的名稱,而?將被替換為cater%,也就是第二個參數所提供的值,在SQL撰寫時,不必再寫WHERE,如果有多個查詢條件,例如BETWEEN子句的查詢,則可以如下:

Criteria criteria = session.createCriteria(User.class); 
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的幾個常用限定查詢方法如下表所示:

方法 說明 
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限定查詢

==============

Hibernate Criteria 关联查询

前面讲了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")):


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值