屋頂上的騎兵

          首頁 新隨筆 聚合 管理
            5 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

          1.使用SQLQuery

          對原生SQL查詢執(zhí)行的控制是通過SQLQuery接口進行的,通過執(zhí)行Session.createSQLQuery()獲取這個接口。最簡單的情況下,
          可以采用以下形式:

          List cats = sess.createSQLQuery("select * from cats")
          .addEntity(Cat.class)
          .list();
          這個查詢指定了:

          SQL查詢字符串

          查詢返回的實體

          這里,結(jié)果集字段名被假設(shè)為與映射文件中指明的字段名相同。對于連接了多個表的查詢,這就可能造成問題,因為可能在多
          個表中出現(xiàn)同樣名字的字段。下面的方法就可以避免字段名重復(fù)的問題:

          List cats = sess.createSQLQuery("select {cat.*} from cats cat")
          .addEntity("cat", Cat.class)
          .list();
          這個查詢指定了:

          SQL查詢語句,它帶一個占位符,可以讓Hibernate使用字段的別名.

          查詢返回的實體,和它的SQL表的別名.

          addEntity()方法將SQL表的別名和實體類聯(lián)系起來,并且確定查詢結(jié)果集的形態(tài)。

          addJoin()方法可以被用于載入其他的實體和集合的關(guān)聯(lián).

          List cats = sess.createSQLQuery(
          "select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id"
          )
          .addEntity("cat", Cat.class)
          .addJoin("kitten", "cat.kittens")
          .list();
          原生的SQL查詢可能返回一個簡單的標(biāo)量值或者一個標(biāo)量和實體的結(jié)合體。

          Double max = (Double) sess.createSQLQuery("select max(cat.weight) as maxWeight from cats cat")
          .addScalar("maxWeight", Hibernate.DOUBLE);
          .uniqueResult();
          除此之外,你還可以在你的hbm文件中描述結(jié)果集映射信息,在查詢中使用。

          List cats = sess.createSQLQuery(
          "select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id"
          )
          .setResultSetMapping("catAndKitten")
          .list();

          2.命名SQL查詢

          可以在映射文檔中定義查詢的名字,可以象調(diào)用一個命名的HQL查詢一樣直接調(diào)用命名SQL查詢.在這種情況下,不需要調(diào)用addEntity()
          方法.

          <sql-query name="persons">
          <return alias="person" class="eg.Person"/>
          SELECT person.NAME AS {person.name},
          person.AGE AS {person.age},
          person.SEX AS {person.sex}
          FROM PERSON person
          WHERE person.NAME LIKE :namePattern
          </sql-query>

          List people = sess.getNamedQuery("persons")
          .setString("namePattern", namePattern)
          .setMaxResults(50)
          .list();

          在sping里面用回調(diào)查詢
          ??? public List getPaysByBizId(final String bizId) {???????
          ??? return (List)getHibernateTemplate().execute(new HibernateCallback(){???????????
          ??? public Object doInHibernate(Session session)throws HibernateException{???????????????
          ??? Query query = session.getNamedQuery("find.pays.by.bizid");???????????????
          ??? query.setParameter("bizId",bizId);???????????????
          ??? return query.list();???????????
          ??? }???????
          ??? },true);???
          ??? }

          ?

          posted on 2007-04-16 19:36 alex-0927 閱讀(1374) 評論(0)  編輯  收藏 所屬分類: 技術(shù)小結(jié)
          主站蜘蛛池模板: 仙游县| 双鸭山市| 珠海市| 巴东县| 岳阳县| 祥云县| 宁河县| 汕头市| 酒泉市| 偏关县| 乐业县| 昂仁县| 德阳市| 浠水县| 洮南市| 安图县| 商洛市| 文昌市| 文登市| 万安县| 南宫市| 丹棱县| 青冈县| 聂荣县| 新余市| 盐津县| 镇赉县| 白朗县| 肥乡县| 诏安县| 长阳| 平潭县| 祁阳县| 青神县| 旅游| 门头沟区| 福建省| 定襄县| 前郭尔| 张北县| 阜康市|