<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    爪哇一角

    共同探討STRUTS#HIBERNATE#SPRING#EJB等技術
    posts - 3, comments - 6, trackbacks - 0, articles - 99
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
    現在的系統中雖然使用了。Hibernate但是沒有使用Hibernate的關聯關系來進行數據庫操作。所有的管理操作都是單獨實現的。所以也不能用Criteria.add()這種方式去查詢關聯的一方。所以只能用Native SQL去查詢結果返回對象了。按照Hibernate3的reference里面說的

    16.1.?使用SQLQuery

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

    List cats = sess.createSQLQuery("select * from cats")
    .addEntity(Cat.class)
    .list();

    這個查詢指定了:

    • SQL查詢字符串

    • 查詢返回的實體

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

    List cats = sess.createSQLQuery("select {cat.*} from cats cat")
    .addEntity("cat", Cat.class)
    .list();

    這個查詢指定了:

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

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

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

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

    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查詢可能返回一個簡單的標量值或者一個標量和實體的結合體。

    Double max = (Double) sess.createSQLQuery("select max(cat.weight) as maxWeight from cats cat")
    .addScalar("maxWeight", Hibernate.DOUBLE);
    .uniqueResult();

    除此之外,你還可以在你的hbm文件中描述結果集映射信息,在查詢中使用。

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

    后來我使用了命名SQL查詢方式。

    16.3.?命名SQL查詢

    可以在映射文檔中定義查詢的名字,然后就可以象調用一個命名的HQL查詢一樣直接調用命名SQL查詢.在這種情況下,我們 需要調用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();


    我覺得這種發式比較好。這樣寫出來的sql可以很整齊。我們的數據庫使用的是oracle,不過按照這上面的寫法發現sql語句有錯誤。
    后來拿到控制臺執行也抱錯。因為原來都用sqlserver,而sqlserver都是可以的。后來發現是表不能有別名改成這樣就好了。
    ????????????SELECT?T_PAY.sys_id?as?{pay.sysId},
    ???????????????????T_PAY.sys_flag?
    as?{pay.sysFlag},
    ???????????????????T_PAY.sys_domain?
    as?{pay.sysDomain},
    ???????????????????T_PAY.sys_owner?
    as?{pay.sysOwner},
    ???????????????????T_PAY.sys_create_date?
    as?{pay.sysCreateDate},
    ???????????????????T_PAY.sys_update_date?
    as?{pay.sysUpdateDate},
    ???????????????????T_PAY.pay_id?
    as?{pay.payId},
    ???????????????????T_PAY.pay_name?
    as?{pay.payName},
    ???????????????????T_PAY.pay_type_id?
    as?{pay.payTypeId},
    ???????????????????T_PAY.pay_date?
    as?{pay.payDate},
    ???????????????????T_PAY.money_type_id?
    as?{pay.moneyTypeId},
    ???????????????????T_PAY.amount?
    as?{pay.amount},
    ???????????????????T_PAY.payer_id?
    as?{pay.payerId},
    ???????????????????T_PAY.payer_name?
    as?{pay.payerName},
    ???????????????????T_PAY.accept_id?
    as?{pay.acceptId},
    ???????????????????T_PAY.accept_name?
    as?{pay.acceptName},
    ???????????????????T_PAY.pay_state_id?
    as?{pay.payStateId},
    ???????????????????T_PAY.remark?
    as?{pay.remark}
    ????????????
    FROM???T_PAY
    ????????????
    JOIN???T_BIZ_PAY
    ????????????
    ON???????T_PAY.pay_id?=?T_BIZ_PAY.pay_id
    ????????????
    WHERE??T_BIZ_PAY.biz_id?=?:bizId
    ? 這里要特別的提醒一下大家千萬不要把主鍵忘了。剛開始我就忘了主鍵,后來調試了半天才找出原因來。

    這樣在sping里面用回調查詢一下就ok了。真的很方便.
    ????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);
    ????}
    主站蜘蛛池模板: 国产在线观看xxxx免费| 国产日本亚洲一区二区三区| 亚洲乱码国产一区网址| 国产免费黄色大片| 国产美女a做受大片免费| 日本最新免费不卡二区在线| 成人激情免费视频| 国产免费观看网站| 亚洲第一页综合图片自拍| 亚洲国产综合无码一区二区二三区 | 亚洲码在线中文在线观看| 亚洲精品视频观看| ww亚洲ww在线观看国产| 亚洲国产精品综合久久20| 亚洲国产乱码最新视频 | 亚洲Av无码乱码在线znlu| 亚洲av手机在线观看| 亚洲精品在线视频| 国产AV无码专区亚洲精品| 久久精品亚洲一区二区| 亚洲视频欧洲视频| 亚洲中文字幕无码一去台湾 | 亚洲成人精品久久| 亚洲精品美女久久久久| 亚洲一区欧洲一区| 青青青亚洲精品国产| 国产高潮流白浆喷水免费A片 | 黄色网站软件app在线观看免费 | 久久人午夜亚洲精品无码区| 香蕉视频免费在线| 久久性生大片免费观看性| 三年片在线观看免费大全电影| 4hu四虎最新免费地址| 日韩中文无码有码免费视频 | 久久久久国色AV免费观看性色| 国产大片91精品免费看3| 中文字幕精品亚洲无线码一区 | 亚洲中久无码永久在线观看同| 亚洲人成在线播放网站岛国| 亚洲一区二区三区高清在线观看| 麻豆一区二区三区蜜桃免费|