收藏 分销(赏)

DetachedCriteria使用.doc

上传人:xrp****65 文档编号:7659578 上传时间:2025-01-11 格式:DOC 页数:3 大小:41KB
下载 相关 举报
DetachedCriteria使用.doc_第1页
第1页 / 共3页
DetachedCriteria使用.doc_第2页
第2页 / 共3页
点击查看更多>>
资源描述
Hibernate3的DetachedCriteria使用 (二)   2011-01-14 12:47:52|  分类: Hibernate |  标签:hibernate  java   |字号 订阅 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限定查詢 前面讲了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的源代码和测试是最好的文档。 Criteria的缺点?DBA很生气,后果很严重。  DetachedCriteria 可以脫離 Session 實例獨立存在,這樣,我們就可以將某些通用的 Criteria 查詢條件進行抽離,每次使用時再與當前 Session 實例綁定以獲得更好的代碼重用效果。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服