<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);
    ????}
    主站蜘蛛池模板: 黄页网站在线免费观看| 久久精品国产亚洲av天美18| 亚洲成AV人综合在线观看| 中国一级毛片视频免费看| 国产亚洲美女精品久久久2020| j8又粗又长又硬又爽免费视频 | 一级毛片试看60分钟免费播放| 免费一级毛片在级播放| 黄网站色视频免费观看45分钟| 亚洲Av无码乱码在线观看性色| 亚洲人成依人成综合网| 亚欧免费无码aⅴ在线观看| 亚洲无删减国产精品一区| 亚洲黄色免费网址| 国产色在线|亚洲| 好爽又高潮了毛片免费下载| 国产精品亚洲专区一区| 1000部无遮挡拍拍拍免费视频观看 | 亚洲国产成AV人天堂无码| 免费观看国产精品| 亚洲AV成人无码网天堂| 亚洲国产香蕉人人爽成AV片久久| 国产福利在线观看永久免费| 婷婷亚洲久悠悠色悠在线播放| 亚洲Av永久无码精品黑人| 九月婷婷亚洲综合在线| 亚洲国产高清人在线| 黄页网站在线看免费| 亚洲伦另类中文字幕| 在线免费观看色片| 亚洲精品偷拍视频免费观看| 亚洲黄色在线视频| 国产特级淫片免费看| 亚洲AV无码无限在线观看不卡| 国产v片免费播放| 亚欧免费无码aⅴ在线观看| 亚洲国产成人久久精品大牛影视| 1000部国产成人免费视频| 亚洲经典千人经典日产| 狠狠色伊人亚洲综合成人| 大陆一级毛片免费视频观看|