posts - 165, comments - 198, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          沒有玩轉的 hibernate hql 檢索

          Posted on 2007-08-24 16:36 G_G 閱讀(601) 評論(0)  編輯  收藏 所屬分類: hibernate
          ??? 1。文件的映射。由于使用 MyEclipse(傻瓜版^_^) 所以 hibernate工具(extensions,Middlegen,tools等)一直沒好好研究這就不獻丑了。
          ??? 2。Criteria
          ??? ?? 1)查詢條件通過 Criteria.add 添加 Expression 用于描述條件
          ??? ??? ??? ??? Expression.( and or like in le lt ..... )
          ??? ?? ?? ?? ?? 參見: Criteria查詢
          ??? ?? 2)criteria.setFirstResult(100);
          ??? ??? ? criteria.setMaxResults(20); //檢索范圍
          ??? ??? ? criteria.addOrder(Order.asc("name")); //排序

          ??? ??? ? .add( Expression.sql("lower($alias.name) like lower(?)", "Fritz%", Hibernate.STRING)?? //直接嵌入SQL
          ??? ?? 3)
          Cat cat = new Cat();
          ??? ?? ?? ....

          ??? ???? List results = session.createCriteria(Cat.class).add( Example.create(cat) ).list(); //根據對象查詢
          ??? ?
          ??? 3。HQL 完全面向對象的,具備繼承、多態和關聯等特性。
          ??? ?? 1)參見: HQL
          ??? ?? 2)內連接,inner join
          ??? ????? 左外連接,left outer join

          ??? ????? 右外連接,right outer join
          ?
          ??? ??? ? http://www.hibernate.org/hib_docs/reference/en/html/queryhql.html
          ??? ?? ?? 代表性的語句
          ??? ?
          Hql.hbm.xml
          ????????
          <set?name="fkSet"?inverse="true">
          ????????????
          <key?column="id"/>
          ????????????
          <one-to-many?class="Fk"/>
          ????????
          </set>
          SQL
          alter?table?fk?add?constraint??FK_hf?foreign?key(id)?references?hql(id)

          mysql> select * from hql;
          +----+----------+
          | id | name???? |
          +----+----------+
          |? 0 | liukaiyi |
          |? 1 | heha???? |
          +----+----------+
          2 rows in set (0.00 sec)

          mysql> select * from fk;
          +----+------+
          | id | name |
          +----+------+
          |? 0 | yy?? |
          |? 1 | xx?? |
          +----+------+
          2 rows in set (0.00 sec)


          //簡單的 結果: 2? liukaiyi:heha
          ????????Query?qu?=?se.createQuery("select?h.name?"?+
          ????????????????????????????????????????
          "?from?Hql?h?,?Fk?f"?+
          ????????????????????????????????????????
          "?where?h.id?=?f.id"?);
          ????????List?list?
          =??qu.list()?;
          ????????tr.commit();
          ????????System.out.println(?list.size()?);
          ????????System.out.println(?list.get(
          0)+":"+list.get(1)?);


          //給出對象 結果 : heha
          Query?qu?=?se.createQuery("from?Hql?h?where?h.fkSet.name='xx'");
          ((Hql)list.get(
          0)).getName()?;


          //給出Object 結果:heha xx
          Query?qu?=?se.createQuery("select?h.name,f.name?from?Hql?h?join?h.fkSet?f?where?f.name='xx'");
          List?list?
          =??qu.list()?;
          tr.commit();
          System.out.println(list.size());????
          Object[]?objs?
          =?(Object[])?list.get(0)?;
          System.out.println(?objs[
          0]?+":"+objs[1]?);

          //給出 Map? heha xx
          ????????
          ????????Query?qu?
          =?se.createQuery("select?new?map(?h.name?as?hn,f.name?as?fn)from?Hql?h?join?h.fkSet?f?where?f.name='xx'");
          ????????List?list?
          =??qu.list()?;

          ????????tr.commit();
          ????????System.out.println(list.size());????
          ????????Map?map?
          =?((Map)list.get(0));
          ????????System.out.println(?map.get(
          "hn")?);
          ????}

          //報表語句? 結果: 1

          ????????Query?qu?=?se.createQuery("select?count(*)?from?Hql?h?join?h.fkSet?f?"?+
          ????????????????????????????????????????
          "?where?h.name='heha'?and?h.id=f.id?"?+
          ????????????????????????????????????????
          "?group?by?h.name?");
          ????????List?list?
          =??qu.list()?;
          ????????tr.commit();
          ????????System.out.println(?list.get(
          0)?);

          //集合內 結果 liukaiyi:heha
          //
          元素集(elementsindices 函數) 可以使用 any, some, all, exists, in
          //
          EG:? from Player p where 3 > all elements(p.scores)
          +----+----------+
          | id | name???? |
          +----+----------+
          |? 0 | liukaiyi |
          |? 1 | heha???? |
          |? 3 | oo?????? |
          +----+----------+

          ?? ????
          ??? ??? Query?qu?
          =?se.createQuery("select?h.name?"?+
          ????????????????????????????????????????
          "?from?Hql?h"?+
          ????????????????????????????????????????
          "?where?h.id?in?elements(h.fkSet.id)?"?);
          ????????List?list?
          =??qu.list()?;
          ????????tr.commit();
          ????????System.out.println(?list.get(
          0)+":"+list.get(1)?);


          //使用 javaBean 綁定
          Query?q?=?s.createQuery("from?foo?Foo?as?foo?where?foo.name=:name?and?foo.size=:size");
          q.setProperties(fooBean);?
          //?fooBean包含方法getName()與getSize()
          List?foos?=?q.list();












          主站蜘蛛池模板: 虞城县| 略阳县| 密云县| 韶关市| 衡水市| 彰化县| 濉溪县| 于田县| 仙居县| 嘉祥县| 日喀则市| 宝应县| 西丰县| 昌乐县| 含山县| 上饶县| 清水河县| 通州区| 大足县| 师宗县| 临湘市| 龙海市| 吐鲁番市| 六盘水市| 大渡口区| 吕梁市| 安仁县| 灵寿县| 全椒县| 曲靖市| 丰原市| 六安市| 壤塘县| 乡宁县| 双鸭山市| 常宁市| 桂阳县| 遂宁市| 连平县| 南城县| 灵山县|