隨筆 - 0, 文章 - 75, 評論 - 0, 引用 - 0
          數(shù)據(jù)加載中……

          Criteria查詢

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


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


          Criteria 查詢采用面向?qū)ο蠓绞椒庋b查詢條件,又稱為對象查詢
          對SQL
          語句進(jìn)行封裝
          采用對象的方式來組合各種查詢條件
          由Hibernate 自動產(chǎn)生SQL 查詢語句
          Criteria由Hibernate
          Session進(jìn)行創(chuàng)建



          SessionFactory
          sessionFactory
          = new Configuration().configure()


           
          .
          buildSessionFactory();


          Session
          session
          =
          sessionFactory.openSession();


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


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


          對應(yīng)SQL的等于(’=’


          Restrictions.allEq()


          使用Map,使用key/value進(jìn)行多個相等的值的比對


          Restrictions.gt()


          對應(yīng)SQL的大于
          (‘>’)


          Restrictions.ge()


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


          Restrictions.lt()


          對應(yīng)SQL的小于
          (‘<’)


          Restrictions.le()


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


          Restrictions.between()


          對應(yīng)SQLbetween子句


          Restrictions.like()


          對應(yīng)SQLlike子句


          Restrictions.in()


          對應(yīng)SQLin子句


          Restrictions.and()


          對應(yīng)SQLand


          Restrictions.or()


          對應(yīng)SQLor


          Restrictions.not()


          對應(yīng)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 實(shí)例,Example 實(shí)現(xiàn)了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
          實(shí)例作為查詢條件



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



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



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


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




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


          Criteria
          的setFirstResult()設(shè)定查詢返回結(jié)果的第一行數(shù)據(jù)的位置


          結(jié)合以上Criteria的兩個方法即可實(shí)現(xiàn)簡單分頁


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


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


          //從第4條數(shù)據(jù)開始讀


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


          //取2條


          List
          results =
          criteria.list();




          總結(jié)
          如何使用Criteria
          查詢?
          如何使用Example查詢已有實(shí)體對象的類似對象?
          如何使用Order對Criteria查詢結(jié)果進(jìn)行排序?
          如何使用Criteria限定查詢返回的數(shù)據(jù)行數(shù)?



          補(bǔ)充:


          Example不能以主鍵字段查詢,-->
          全返回數(shù)據(jù)


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

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


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 当涂县| 万荣县| 泗阳县| 义乌市| 金华市| 平果县| 永和县| 化州市| 东乡| 江都市| 淮北市| 阳新县| 恩平市| 府谷县| 绥江县| 双江| 吉木萨尔县| 恩施市| 南溪县| 合川市| 巴塘县| 启东市| 霍州市| 凤冈县| 海伦市| 枞阳县| 蒙自县| 邓州市| 顺平县| 遂平县| 运城市| 八宿县| 衡水市| 确山县| 游戏| 杭锦旗| 黑山县| 龙海市| 威海市| 防城港市| 二手房|