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

          沒有玩轉(zhuǎn)的 hibernate hql 檢索

          Posted on 2007-08-24 16:36 G_G 閱讀(598) 評論(0)  編輯  收藏 所屬分類: hibernate
          ??? 1。文件的映射。由于使用 MyEclipse(傻瓜版^_^) 所以 hibernate工具(extensions,Middlegen,tools等)一直沒好好研究這就不獻(xiàn)丑了。
          ??? 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(); //根據(jù)對象查詢
          ??? ?
          ??? 3。HQL 完全面向?qū)ο蟮模邆淅^承、多態(tài)和關(guān)聯(lián)等特性。
          ??? ?? 1)參見: HQL
          ??? ?? 2)內(nèi)連接,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)


          //簡單的 結(jié)果: 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)?);


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


          //給出Object 結(jié)果: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")?);
          ????}

          //報表語句? 結(jié)果: 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)?);

          //集合內(nèi) 結(jié)果 liukaiyi:heha
          //
          元素集(elementsindices 函數(shù)) 可以使用 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();












          主站蜘蛛池模板: 龙游县| 台东县| 丰原市| 兴化市| 晋中市| 南乐县| 资中县| 鄢陵县| 紫阳县| 三原县| 大悟县| 抚远县| 怀远县| 凤山市| 温宿县| 资阳市| 长丰县| 奉化市| 乌苏市| 尼木县| 芜湖县| 正阳县| 札达县| 乌拉特前旗| 白沙| 苏尼特左旗| 根河市| 黔江区| 喀什市| 南华县| 离岛区| 吴旗县| 定结县| 慈利县| 荣成市| 富裕县| 星座| 尼木县| 封开县| 石台县| 松原市|