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

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

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

    hibernate native sql的小技巧

    為了性能考慮,使用了 native sql 。因?yàn)樾枰猪摚枰?/span> 2 sql ,一個獲取 list 一個取得總數(shù)。獲取 list 很好寫:

    ?

    ?1 private ?List?getListByNativeSQL( final ?Class?cls,? final ?String?sql)? {
    ?2
    ?3 ??????? return ?(List)?getHibernateTemplate().execute( new ?HibernateCallback()? {
    ?4
    ?5 ??????????? public ?Object?doInHibernate(Session?session)
    ?6
    ?7 ?????????????????? throws ?HibernateException? {
    ?8
    ?9 ?????????????? return ?session.createSQLQuery(sql).addEntity(cls).list();
    10
    11 ???????????}

    12
    13 ???????}
    );
    14
    15 ????}

    16

    ?

    獲取總數(shù)查了下 hibernate reference, 試了幾次才明白用法 :

    ?1 private ?BigInteger?getCountByNativeSQL( final ?String?sql)? {
    ?2
    ?3 ??????? return ?(BigInteger)?getHibernateTemplate().execute(
    ?4
    ?5 ?????????????? new ?HibernateCallback()? {
    ?6
    ?7 ?????????????????? public ?Object?doInHibernate(Session?session)
    ?8
    ?9 ????????????????????????? throws ?HibernateException? {
    10
    11 ????????????????????? return ?(BigInteger)?(session.createSQLQuery(sql).uniqueResult());
    12
    13 ??????????????????}

    14
    15 ??????????????}
    );
    16
    17 ????}

    18

    這里的

    sql 是“ select count(*) 開頭的”。這里大家可能要問,為什么要使用 BigInteger ,因?yàn)槿绻?/span> uniqueResult() 默認(rèn)就返回 BigInteger ,而 BigInteger cast Integer 會出錯。那么如果我就是要返回 Integer 呢,可以通過下面的辦法實(shí)現(xiàn):

    ?1 private ?Integer?getCountByNativeSQL( final ?String?sql)? {
    ?2
    ?3 ??????? return ?(Integer)?getHibernateTemplate().execute(
    ?4
    ?5 ?????????????? new ?HibernateCallback()? {
    ?6
    ?7 ?????????????????? public ?Object?doInHibernate(Session?session)
    ?8
    ?9 ????????????????????????? throws ?HibernateException? {
    10
    11 ????????????????????? return ?(Integer)?(session.createSQLQuery(sql).addScalar( " count " ,?Hibernate.INTEGER).uniqueResult());
    12
    13 ??????????????????}

    14
    15 ??????????????}
    );
    16
    17 ????}

    18

    大家注意粗體的部分,這里是給一個

    alias 賦予類型,那么 sql 就需要變成以 ”select count(*) as count ” 開頭了。

    posted on 2007-03-02 10:52 pesome 閱讀(5256) 評論(2)  編輯  收藏 所屬分類: 開源軟件

    評論

    # re: hibernate native sql的小技巧 2007-03-23 16:40 StormSpire

    也可以考慮用 projection 的 rowCount() 方法實(shí)現(xiàn)  回復(fù)  更多評論   

    # re: hibernate native sql的小技巧 2007-11-09 12:55 itbeta

    前兩天也踫到這個問題,更好辦法是使用轉(zhuǎn)換為Number,再用.intValue()方法取數(shù):((Number)result).intValue();  回復(fù)  更多評論   

    <2007年3月>
    25262728123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    主要記錄作者在學(xué)習(xí)java中的每一步足跡。除非特別說明,所有文章均為本blog作者原創(chuàng),如需轉(zhuǎn)載請注明出處和原作者,如用于商業(yè)目的,需跟作者本人聯(lián)系。
    歡迎大家訪問:

    常用鏈接

    留言簿(16)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    收藏夾

    java技術(shù)

    人間百態(tài)

    朋友們的blog

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 狼人大香伊蕉国产WWW亚洲| 欧洲精品成人免费视频在线观看| 亚洲午夜无码久久久久小说 | 女人隐私秘视频黄www免费| 亚洲妓女综合网99| 亚洲精品成人区在线观看| 亚洲高清免费视频| 亚洲αv久久久噜噜噜噜噜| 日本视频一区在线观看免费| 国产精品小视频免费无限app | 天天操夜夜操免费视频| 亚洲黄色片免费看| 一个人免费视频在线观看www | 91免费资源网站入口| 性xxxx视频免费播放直播| 国产一级婬片A视频免费观看| 污网站在线观看免费| 国产成人亚洲综合a∨| 亚洲人成电影网站色| 国产成人精品亚洲日本在线| 亚洲一区在线视频| 亚洲午夜精品国产电影在线观看| 内射干少妇亚洲69XXX| 亚洲精品综合一二三区在线| 国产V亚洲V天堂无码久久久| 中文字幕亚洲无线码| 亚洲精品无码久久久久AV麻豆| 亚洲?v女人的天堂在线观看| 免费v片视频在线观看视频| 国产又粗又猛又爽又黄的免费视频| 在线a毛片免费视频观看| 成人免费无毒在线观看网站| 最近免费中文字幕4| 成年丰满熟妇午夜免费视频| 成人看的午夜免费毛片| 白白国产永久免费视频| 亚洲AⅤ视频一区二区三区| 亚洲成网777777国产精品| 久久激情亚洲精品无码?V| 成人免费看吃奶视频网站| 好爽…又高潮了毛片免费看|