隨筆 - 0, 文章 - 75, 評論 - 0, 引用 - 0
          數據加載中……

          Criteria查詢

          用到特定于數據庫的SQL 語句,程序本身會依賴于特定的數據庫
          不了解SQL 語句,恐怕對使用HQL帶來困難


          Hibernate提供的Criteria查詢
          幫助我們解決了這種問題


          Criteria 查詢采用面向對象方式封裝查詢條件,又稱為對象查詢
          對SQL
          語句進行封裝
          采用對象的方式來組合各種查詢條件
          由Hibernate 自動產生SQL 查詢語句
          Criteria由Hibernate
          Session進行創建



          SessionFactory
          sessionFactory
          = new Configuration().configure()


           
          .
          buildSessionFactory();


          Session
          session
          =
          sessionFactory.openSession();


          Criteria
          criteria
          =
          session.createCriteria(User.class);
          //查詢該實體中所有數據


          List
          result
          =
          criteria.list();


          Iterator
          it
          =
          result.iterator();


          while
          (
          it.hasNext())
          {


          User user
          =
          (User)
          it.next();


          System.out.println("用戶名:"
          +
          user.getName());


          }


          session.close();


          sessionFactory.close();


          --------------------------------------------------------------


          Criteria
          criteria
          =
          session.createCriteria(User.class);


          criteria.add(Restrictions.eq("name",
          "bob")); //使用add()添加查詢條件



          //查詢條件:name='admin'


          List
          result
          =
          criteria.list();


          Iterator
          it
          =
          result.iterator();


          //...

















































          方法




          Restrictions.eq()


          對應SQL的等于(’=’


          Restrictions.allEq()


          使用Map,使用key/value進行多個相等的值的比對


          Restrictions.gt()


          對應SQL的大于
          (‘>’)


          Restrictions.ge()


          對應SQL的大于等于
          (‘>=’)


          Restrictions.lt()


          對應SQL的小于
          (‘<’)


          Restrictions.le()


          對應SQL的小于等于
          (‘<=’)


          Restrictions.between()


          對應SQLbetween子句


          Restrictions.like()


          對應SQLlike子句


          Restrictions.in()


          對應SQLin子句


          Restrictions.and()


          對應SQLand


          Restrictions.or()


          對應SQLor


          Restrictions.not()


          對應SQLnot



          Criteria
          criteria
          =
          session.createCriteria(House.class);


          criteria.add(Restrictions.or(


          Restrictions.eq("price",
          new Double(2300)),


          Restrictions.like("title",
          "%
          地鐵%")));



          如果屬性條件很多,使用Restrictions
          也不方便


          Hibernate提供Example
          的create()方法來建立Example 實例,Example 實現了Criteria 接口


          House
          house
          =
          new House()
          ;


          house.setPrice(new
          Double(2000))
          ;
          //查詢條件,添加到house對象中


          house.setFloorage(new
          Integer(40))
          ;


          SessionFactory
          sessionFactory
          =
          new Configuration().configure().
          buildSessionFactory();


          Session
          session
          =
          sessionFactory.openSession();


          Criteria
          criteria
          =
          session.createCriteria(House.class);


          criteria.add(Example.create(house));
          //通過Example
          create()方法來建立Example
          實例作為查詢條件



          Hibernate
          在自動生成SQL
          語句時將自動過濾掉對象的空屬性,根據有非空屬性值的屬性生成查詢條件



          Criteria
          查詢不僅能組合出SQL中where子句的功能,還可以組合出排序查詢功能
          使用org.hibernate.criterion.Order對結果進行排序
          排序的方法為:
          asc()
          desc()



          Criteria
          criteria
          =
          session.createCriteria(House.class);


          criteria.addOrder(Order.desc("price"));
          //加入Order
          條件
          以價格降序的方式排列




          Criteria
          的setMaxResults()方法可以限定查詢返回數據的行數


          Criteria
          的setFirstResult()設定查詢返回結果的第一行數據的位置


          結合以上Criteria的兩個方法即可實現簡單分頁


          Criteria
          criteria
          =
          session.createCriteria(House.class);


          criteria.setFirstResult(3);
          //設定查詢返回結果的第一行數據的位置


          //從第4條數據開始讀


          criteria.setMaxResults(2);
          //限定查詢返回數據的行數


          //取2條


          List
          results =
          criteria.list();




          總結
          如何使用Criteria
          查詢?
          如何使用Example查詢已有實體對象的類似對象?
          如何使用Order對Criteria查詢結果進行排序?
          如何使用Criteria限定查詢返回的數據行數?



          補充:


          Example不能以主鍵字段查詢,-->
          全返回數據


          也不會使用like查詢
          (eq.()方法)

          posted on 2012-04-22 15:55 hantai 閱讀(510) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 磴口县| 盖州市| 右玉县| 漳州市| 乌拉特中旗| 祁门县| 青铜峡市| 登封市| 和硕县| 龙门县| 阳东县| 永善县| 青铜峡市| 外汇| 阿瓦提县| 集贤县| 延寿县| 维西| 永昌县| 慈利县| 淮安市| 馆陶县| 双桥区| 武城县| 古浪县| 龙里县| 铜山县| 湟源县| 莲花县| 伊吾县| 土默特右旗| 桂林市| 金阳县| 沧州市| 乌拉特前旗| 松江区| 乐平市| 齐齐哈尔市| 许昌市| 临湘市| 电白县|