Java學習

          java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進步

           

          Hibernate Criteria 關聯查詢

          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();

          返回list是 criteria.list(); 返回單一的數據是criteria.uniqueResult().注意的是,用criteria.uniqueResult()時,一定要確保數據庫里面只有一條數據滿足要求,不然就會throws not unique異常。
          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限定查詢

          posted on 2008-07-18 13:38 找個美女做老婆 閱讀(3690) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          公告

          本blog已經搬到新家了, 新家:www.javaly.cn
           http://www.javaly.cn

          常用鏈接

          留言簿(6)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 奉新县| 白水县| 滦平县| 平邑县| 广德县| 武强县| 始兴县| 茶陵县| 沙湾县| 昌江| 永康市| 沂南县| 嘉善县| 开阳县| 永定县| 连云港市| 磴口县| 兴安盟| 岑溪市| 县级市| 南召县| 鄂尔多斯市| 衡水市| 景洪市| 福鼎市| 岳普湖县| 兴宁市| 南投市| 文成县| 修武县| 甘德县| 鄂州市| 资源县| 聂拉木县| 民权县| 江门市| 安顺市| 德保县| 保康县| 山东省| 洛阳市|