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

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

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

    e代劍客——溫柔一刀

    生活就像海洋,只有意志堅強的人,才能到達(dá)彼岸

       :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      76 隨筆 :: 7 文章 :: 215 評論 :: 0 Trackbacks
    開發(fā)采用spring+ibatis,數(shù)據(jù)庫用oracle,數(shù)據(jù)量有幾千萬以上,而且還要不斷的增多,用了三層子查詢實現(xiàn)分頁控制

    下面都只是舉的例子
    ?1 < sqlMap? namespace ="Y_wjlx" > ?
    ?2
    ?3 ???????? < resultMap? class ="com.ctgusec.model.Y_wjlx" ?id ="y_wjlx" > ?
    ?4 ???????????????? < result? property ="wjbh" ?column ="wjbh" ? /> ?
    ?5 ???????????????? < result? property ="wjmc" ?column ="wjmc" ? /> ?
    ?6 ???????? </ resultMap > ?
    ?7 ???????? < select? id ="getAllY_wjlx" ?resultMap ="y_wjlx" > ?
    ?8 ???????????????? <![CDATA[ ????????????????????????
    ?9 ????????????????SELECT?wjbh,wjmc?FROM?(SELECT?row_.*,?rownum?rownum_?FROM?(select?wjbh,wjmc,rownum?rn?from?y_wjlx)?row_?WHERE?rownum?<=?#end#)?WHERE?rownum_?>?#start#?
    10 ???????????????? ]]> ?
    11 ???????? </ select > ?
    12
    13 </ sqlMap > ?

    用了個模型基類存儲分頁參數(shù),模型類可以繼承此類
    public ? class ?BaseModel? {?

    ????????
    private ?Integer?start? = ? 0 ;?

    ????????
    private ?Integer?end? = ? 30 ;?

    ????????
    private ?Integer?size? = ? 30 ;?

    ????????
    private ?Integer?currentPage;?

    ????????
    private ?Integer?priviousPage;?

    ????????
    private ?Integer?nextPage;?

    ????????
    public ?BaseModel()? {?
    ????????????????
    ????????}
    ?
    ????????
    public ?BaseModel(Integer?currentPage)? {?
    ????????????????
    if ?(currentPage? > ? 0 )? {?
    ????????????????????????
    this .currentPage? = ?currentPage;?
    ????????????????????????
    this .priviousPage? = ?currentPage? - ? 1 ;?
    ????????????????????????
    this .nextPage? = ?currentPage? + ? 1 ;?
    ????????????????????????
    this .start? = ?priviousPage? * ?size;?
    ????????????????????????
    this .end? = ?currentPage? * ?size;?
    ????????????????}
    ?
    ????????}
    ?

    ????????
    // 省略geter、serter方法?
    }
    ?

    dao層:
    1public?class?SqlY_wjlxDao?extends?SqlMapClientDaoSupport?implements?IY_wjlxDao?{?
    2
    3????????public?List?getAllY_wjlx(Y_wjlx?y_wjlx)?{?
    4????????????????
    5????????????????return?this.getSqlMapClientTemplate().queryForList("getAllY_wjlx",?y_wjlx);????????????????
    6????????}
    ?
    7}
    ?
    8

    控制層:spring控制類實現(xiàn)分頁
    ?1 public ? class ?Y_wjlxListAllController? extends ?AbstractController? {?
    ?2
    ?3 ????????Integer?currentPage?;?
    ?4 ????????
    ?5 ???????? // y_wjlx類繼承BaseModel類?
    ?6 ????????Y_wjlx?y_wjlx;?
    ?7
    ?8 ????????@Override?
    ?9 ???????? protected ?ModelAndView?handleRequestInternal(HttpServletRequest?request,?
    10 ????????????????????????HttpServletResponse?response)? throws ?Exception? {?
    11 ????????????????String?page? = ?request.getParameter( " page " );?
    12 ???????????????? if ?(page? == ? null ? || ?page.equals( " head " ))? {?
    13 ????????????????????????currentPage = 1 ;?
    14 ????????????????????????y_wjlx? = ? new ?Y_wjlx(currentPage);?
    15 ????????????????????????request.getSession().setAttribute( " currentPage " ,?currentPage);?
    16 ????????????????}
    ?
    17 ???????????????? if ?( " privious " .equals(page))? {?
    18 ????????????????????????currentPage? = ?(Integer)?request.getSession().getAttribute( " currentPage " );?
    19 ???????????????????????? if (currentPage > 1 )?currentPage? -= ? 1 ;?
    20 ????????????????????????y_wjlx? = ? new ?Y_wjlx(currentPage);?
    21 ????????????????????????request.getSession().setAttribute( " currentPage " ,?currentPage);?
    22 ????????????????}
    ? else ? if ?( " next " .equals(page))? {?
    23 ????????????????????????currentPage? = ?(Integer)?request.getSession().getAttribute( " currentPage " );?
    24 ????????????????????????currentPage? += ? 1 ;?
    25 ????????????????????????y_wjlx? = ? new ?Y_wjlx(currentPage);?
    26 ????????????????????????request.getSession().setAttribute( " currentPage " ,?currentPage);?
    27 ????????????????}
    ?
    28 ????????????????List?list? = ? this .drv_Manager.getAllY_wjlx(y_wjlx);?
    29 ???????????????? return ? new ?ModelAndView( " y_wjlxList " ,? " list " ,?list);?
    30 ????????}
    ?
    31
    32 ???????? private ?IDrv_Manager?drv_Manager;?
    33
    34 ???????? public ? void ?setDrv_Manager(IDrv_Manager?drv_Manager)? {?
    35 ???????????????? this .drv_Manager? = ?drv_Manager;?
    36 ????????}
    ?
    37 }

    jsp頁面分頁調(diào)用
    1 < button? onclick ="location.href??=??'y_wjlxList.shtml?page=head'" > 首&&頁 </ button > ????
    2 &&?
    3 < button? onclick ="location.href??=??'y_wjlxList.shtml?page=privious'" > 上一頁 </ button > ????
    4 &&?
    5 < button??? onclick ="location.href='y_wjlxList.shtml?page=next'" > 下一頁 </ button >

    實現(xiàn)了分頁,而且前面的數(shù)據(jù)查詢翻頁效率很高,但是越到后面越慢(這個好象是沒有辦法的)

    現(xiàn)在的問題是:
    1、spring控制類太累贅,好象做了它不該做的事情,翻頁控制有沒有比較好的辦法抽到服務(wù)層?
    2、翻頁也只有:首頁、上頁、下頁;想把最后一頁也弄出來,但是擔(dān)心效率太低,首先要統(tǒng)計數(shù)據(jù)總數(shù),還有就是三層子查詢到了幾千萬數(shù)據(jù)后效率就慢了。
    有沒有比較好的解決辦法?

    posted on 2006-08-30 10:06 溫柔一刀 閱讀(6455) 評論(23)  編輯  收藏 所屬分類: 開源框架數(shù)據(jù)庫相關(guān)

    評論

    # re: spring、ibatis控制oracle分頁的問題 2006-08-30 11:25 Tendy
    --
    實現(xiàn)了分頁,而且前面的數(shù)據(jù)查詢翻頁效率很高,但是越到后面越慢(這個好象是沒有辦法的)
    --
    如果一個 table 有幾千萬數(shù)據(jù),誰去翻頁……搜索好了  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2006-08-30 11:46 zeroblue
    看hibernate的源代碼,看丫是怎么翻頁的。
    我沒仔細(xì)看過,但相信會有提示。  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2006-08-30 13:10 溫柔一刀
    @zeroblue
    hibernate調(diào)用到了最后也就是三層子查詢了
    SELECT wjbh,wjmc FROM (SELECT row_.*, rownum rownum_ FROM (select wjbh,wjmc,rownum rn from y_wjlx) row_ WHERE rownum <= #end#) WHERE rownum_ > #start#
      回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2006-08-30 13:11 溫柔一刀
    @Tendy
    您說的有道理
    但是客戶有要求
    人家是上帝啊  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2006-08-30 14:05 boddi
    SELECT wjbh,wjmc FROM (SELECT row_.*, rownum rownum_ FROM (select wjbh,wjmc,rownum rn from y_wjlx) row_ WHERE rownum <= #end#) WHERE rownum_ > #start#
    中的select wjbh,wjmc,rownum rn from y_wjlx不會造成很大的效率問題嗎?  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2006-08-30 14:18 why
    老大,你的代碼真是丑陋,看著真累  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2006-08-30 14:26 溫柔一刀
    @why
    Sorry,影響了您的視覺,偶也知道很丑陋,想改進(jìn)它,謝謝您  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2006-08-30 14:27 溫柔一刀
    @boddi
    這個應(yīng)該算效率比較高的查詢了  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2006-08-31 18:21 boddi
    SELECT wjbh,wjmc FROM (SELECT row_.*, rownum rownum_ FROM (select wjbh,wjmc,rownum rn from y_wjlx) row_ WHERE rownum <= #end#) WHERE rownum_ > #start#
    在SQLSERVER中無法實現(xiàn)啊!請問SQLSERVER有何高招嗎?謝謝
      回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2006-08-31 19:09 溫柔一刀
    @boddi
    這個語句只能在oracle用
    SQLSERVER應(yīng)該也有類似的實現(xiàn)
    您可以google一把看看  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2006-09-02 15:02 Jude Zhu
    <br>SELECT
    <br> wjbh,
    <br> wjmc
    <br>FROM (
    <br> SELECT
    <br> ROW_NUMBER (OVER wjbh ASC) AS ROWNUMBER
    <br> wjbh,
    <br> wjmc
    <br> FROM y_wjlx
    <br>)
    <br>WHERE ROWNUMBER < #end#
    <br> AND ROWNUMBER > #start#
      回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2006-09-04 12:20 kimsoft
    不錯,希望再寫一些spring+ibatis方面的blog  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2006-09-04 13:23 黃奕福
    這樣簡單一些吧:
    select * from
    (
    select rownum rownum__, t.* from mytable t where rownum < #start#
    )
    where rownum__ > #end#;  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2006-09-13 08:24 javarwx
    這個分頁和我們用ibatis開發(fā)的一個項目中分頁的寫法一樣,如果不需要對數(shù)據(jù)排序的話建議可以不要用三層嵌套,可以只用兩層嵌套查詢,這樣或許會提高些速度

    只是我現(xiàn)在一直不是很明白ibatis提供的SqlMapClientImpl SqlMapDaoTemplate SqlMapSessionImpl這三個類有什么不同,希望指教

    QQ:66116103  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2006-09-13 10:18 溫柔一刀
    @javarwx
    看了下源碼,SqlMapClientImpl ,SqlMapSessionImpl實現(xiàn)了同一個父類,我也沒有搞清楚,慚愧,另外,好象沒有SqlMapDaoTemplate 這個類吧,待我在仔細(xì)研究下源碼,謝謝您的建議  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2006-10-15 17:00 曲靜波
    @Tendy
    如果一個 table 有幾千萬數(shù)據(jù),誰去翻頁……搜索好了

    有道理.但如果要是可以選擇頁碼,鏈出末頁,效率顯然就低了~  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2006-10-15 17:01 曲靜波
    應(yīng)該不會低很多,客戶應(yīng)該從易用性角度考慮.  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2007-01-12 10:25 ♂蜜蜂㊣仔仔g(shù)z
    代碼不能重用,應(yīng)以復(fù)用未主要開發(fā)目的。分頁嵌套比較正常,效率不會降低多少,復(fù)用應(yīng)該是以參數(shù)形式傳入sql,動態(tài)字段實現(xiàn)select count(1) from table 總量計算,當(dāng)前頁面計算等工作,最好以標(biāo)簽形式嵌套頁面,免去維護(hù)問題。總的來說做的是不錯的。  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2007-04-10 11:47 rjbj
    請問用mysql,該怎么寫?謝謝。  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2008-04-21 20:28 soei
    蜜蜂㊣仔仔g(shù)z
    說的對,
    跟我現(xiàn)在做的一樣,花幾天時間debug ibatis的源碼,做出來效果不錯  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2008-05-19 18:31 asd
    rdthert  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 2008-05-19 18:32 asd
    aaaaaaaaaaaaaaaaa  回復(fù)  更多評論
      

    # re: spring、ibatis控制oracle分頁的問題 [未登錄] 2008-05-19 18:35 java愛好者
    您好!最近在學(xué)ibatis,想用spring+ibatis做個分頁,但我發(fā)現(xiàn)了個問題,就是
    SELECT wjbh,wjmc FROM (SELECT row_.*, rownum rownum_ FROM (select wjbh,wjmc,rownum rn from y_wjlx) row_ WHERE rownum <= #end#) WHERE rownum_ > #start#

    假如頁面上有很多的查詢條件,有的值用戶可以輸入,也可不輸入,你這里的sql語句不就不能在改變了,我覺得sql語句應(yīng)該是動態(tài)的才好!但這樣是不是就不能滿足動態(tài)變sql,我是Ibatis初學(xué)者,不知道有什么好的解決方案?請賜教
      回復(fù)  更多評論
      

    聯(lián)系偶 zhupanjava@gmail.com 溫柔一刀
    主站蜘蛛池模板: 亚洲精品视频免费看| 亚洲精品人成电影网| 99久久免费精品国产72精品九九| WWW免费视频在线观看播放| 亚洲人成无码网站在线观看| 久久久亚洲欧洲日产国码二区| 亚洲欧洲久久av| 四虎永久成人免费| 无码一区二区三区AV免费| 一级毛片免费播放| 国产偷伦视频免费观看| 黄色网页在线免费观看| 一本大道一卡二大卡三卡免费| 性色av极品无码专区亚洲| 亚洲中文字幕无码mv| 亚洲一区在线免费观看| 亚洲网站免费观看| 亚洲黄色在线观看视频| 亚洲伦另类中文字幕| 亚洲电影一区二区| 久久久久亚洲AV成人无码| 亚洲精品白浆高清久久久久久| 亚洲综合伊人久久综合| 久久亚洲国产精品五月天婷| 亚洲无码视频在线| 亚洲无码黄色网址| 亚洲中文字幕无码久久精品1| 亚洲区小说区图片区| 亚洲精品线路一在线观看| 亚洲国产精品一区二区三区久久| 又粗又黄又猛又爽大片免费| 日本免费人成黄页网观看视频| 免费观看的毛片手机视频| 国产成人免费高清在线观看| 国产午夜鲁丝片AV无码免费| 国产成人无码免费视频97| 亚洲毛片不卡av在线播放一区| 最新国产AV无码专区亚洲| 亚洲国产第一站精品蜜芽| 亚洲一卡2卡三卡4卡有限公司| 亚洲黄色在线播放|