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

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

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

    e代劍客——溫柔一刀

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

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

    下面都只是舉的例子
    ?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 > ?

    用了個模型基類存儲分頁參數,模型類可以繼承此類
    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控制類實現分頁
    ?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頁面分頁調用
    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 >

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

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

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

    評論

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

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

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

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

    # 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不會造成很大的效率問題嗎?  回復  更多評論
      

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

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

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

    # 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中無法實現?。≌垎朣QLSERVER有何高招嗎?謝謝
      回復  更多評論
      

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

    # 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#
      回復  更多評論
      

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

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

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

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

    QQ:66116103  回復  更多評論
      

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

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

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

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

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

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

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

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

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

    # re: spring、ibatis控制oracle分頁的問題 [未登錄] 2008-05-19 18:35 java愛好者
    您好!最近在學ibatis,想用spring+ibatis做個分頁,但我發現了個問題,就是
    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語句應該是動態的才好!但這樣是不是就不能滿足動態變sql,我是Ibatis初學者,不知道有什么好的解決方案?請賜教
      回復  更多評論
      

    聯系偶 zhupanjava@gmail.com 溫柔一刀
    主站蜘蛛池模板: 四虎永久在线精品视频免费观看| 国产小视频在线免费| 亚洲日本天堂在线| 在线日韩日本国产亚洲| 6080午夜一级毛片免费看 | 69视频在线观看高清免费| 亚洲av无码一区二区三区天堂古代| 国产精品视_精品国产免费 | 无码区日韩特区永久免费系列 | 久久久久亚洲?V成人无码| 精品一区二区三区无码免费视频| 亚洲av无码成人影院一区| 亚洲AV永久无码精品一百度影院| 欧美最猛性xxxxx免费| 成人无码视频97免费| 在线亚洲午夜片AV大片| 国产亚洲自拍一区| 啦啦啦手机完整免费高清观看| 国产特黄一级一片免费| 亚洲日韩一区精品射精| 亚洲一级二级三级不卡| 亚洲第一黄色网址| 大地资源在线观看免费高清| 久久久精品午夜免费不卡| 国产亚洲综合精品一区二区三区| 亚洲日韩国产精品无码av| 久久久久久A亚洲欧洲AV冫| 成人毛片免费视频| 免费A级毛片无码A∨免费| 国产免费久久精品99久久| 亚洲av乱码中文一区二区三区| 亚洲综合久久成人69| 亚洲精品V欧洲精品V日韩精品| 国产亚洲福利一区二区免费看| 久久精品免费一区二区| 免费看黄的成人APP| 一区二区三区免费在线视频| 亚洲国产AV无码一区二区三区| 亚洲日本国产乱码va在线观看| 国产成人A人亚洲精品无码| 亚洲乱码中文字幕综合234|