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

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

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

    隨筆-72  評(píng)論-63  文章-0  trackbacks-0

    對(duì)于分頁(yè),主要思想無(wú)非兩種,一是從數(shù)據(jù)庫(kù)取出所有記錄后進(jìn)行分頁(yè),另一種思路是在取出數(shù)據(jù)的同時(shí)進(jìn)行分頁(yè),然后在頁(yè)面顯示,昨晚查了不少資料,對(duì)目前流行的分頁(yè)方式總結(jié)了下。
    個(gè)人覺(jué)得寫(xiě)的比較好的兩篇文章:
    http://www.matrix.org.cn/thread.shtml?topicId=40818&forumId=23
    http://forum.javaeye.com/viewtopic.php?t=6298(java視線對(duì)這個(gè)問(wèn)題討論的比較深入,受益匪淺)
    本人目前有個(gè)項(xiàng)目要用到Spring的JdbcTemplate,順帶搜了點(diǎn)關(guān)于其分頁(yè)的實(shí)現(xiàn)方法:

    ??????????????????????????????????????????? 用Spring的JdbcTemplate實(shí)現(xiàn)分頁(yè)功能
    最近使用了spring中的JdbcTemplate實(shí)現(xiàn)數(shù)據(jù)庫(kù)的查詢和插入操作,發(fā)現(xiàn)spring的JdbcTemplate 不象HibernateTemplate那么好,已經(jīng)實(shí)現(xiàn)了分頁(yè)功能。所以要自己實(shí)現(xiàn),使用getJdbcTemplate().queryForList(string sql)得到的結(jié)果集是所有的。
      
      如果你的查詢有10000條記錄,或者更多,速度肯定慢了,當(dāng)然你可以通過(guò)resultset中的游標(biāo)控制查詢的起始和結(jié)束。我這里用的是Oracle數(shù)據(jù)庫(kù),使用偽列ROWNUM來(lái)實(shí)現(xiàn)分頁(yè)。我的分頁(yè)代碼如下:
      
      
    ????package com.deity.ranking.util;import java.util.List;
      import org.springframework.jdbc.core.JdbcTemplate;
      import org.springframework.jdbc.core.support.JdbcDaoSupport;
      /** * 分頁(yè)函數(shù) * * @author allenpan */public class Pagination extends JdbcDaoSupport{
      public static final int NUMBERS_PER_PAGE = 10;
      //一頁(yè)顯示的記錄數(shù)
      private int numPerPage;
      //記錄總數(shù)
      private int totalRows;
      //總頁(yè)數(shù)
      private int totalPages;
      //當(dāng)前頁(yè)碼
      private int currentPage;
      //起始行數(shù)
      private int startIndex;
      //結(jié)束行數(shù)
      private int lastIndex;
      //結(jié)果集存放List
      private List resultList;
      //JdbcTemplate jTemplate
      private JdbcTemplate jTemplate;
      /**
      * 每頁(yè)顯示10條記錄的構(gòu)造函數(shù),使用該函數(shù)必須先給Pagination設(shè)置currentPage,jTemplate初值
      * @param sql oracle語(yǔ)句
      */
      public Pagination(String sql){
      if(jTemplate == null){
      throw new IllegalArgumentException("com.deity.ranking.util.Pagination.jTemplate is null,please initial it first. ");
      }else if(sql.equals("")){
      throw new IllegalArgumentException("com.deity.ranking.util.Pagination.sql is empty,please initial it first. ");
      }
      new Pagination(sql,currentPage,NUMBERS_PER_PAGE,jTemplate);
      }
      /**分頁(yè)構(gòu)造函數(shù)
      * @param sql 根據(jù)傳入的sql語(yǔ)句得到一些基本分頁(yè)信息
      * @param currentPage 當(dāng)前頁(yè)
      * @param numPerPage 每頁(yè)記錄數(shù)
      * @param jTemplate JdbcTemplate實(shí)例
      */
      public Pagination(String sql,int currentPage,int numPerPage,JdbcTemplate jTemplate){
      if(jTemplate == null){
      throw new IllegalArgumentException("com.deity.ranking.util.Pagination.jTemplate is null,please initial it first. ");
      }else if(sql == null || sql.equals("")){
      throw new IllegalArgumentException("com.deity.ranking.util.Pagination.sql is empty,please initial it first. ");
      }
      //設(shè)置每頁(yè)顯示記錄數(shù)
      setNumPerPage(numPerPage);
      //設(shè)置要顯示的頁(yè)數(shù)
      setCurrentPage(currentPage);
      //計(jì)算總記錄數(shù)
      StringBuffer totalSQL = new StringBuffer(" SELECT count(*) FROM ( ");
      totalSQL.append(sql);
      totalSQL.append(" ) totalTable ");
      //給JdbcTemplate賦值
      setJdbcTemplate(jTemplate);
      //總記錄數(shù)
      setTotalRows(getJdbcTemplate().queryForInt(totalSQL.toString()));
      //計(jì)算總頁(yè)數(shù)
      setTotalPages();
      //計(jì)算起始行數(shù)
      setStartIndex();
      //計(jì)算結(jié)束行數(shù)
      setLastIndex();
      System.out.println("lastIndex="+lastIndex);//////////////////
      //構(gòu)造oracle數(shù)據(jù)庫(kù)的分頁(yè)語(yǔ)句
      StringBuffer paginationSQL = new StringBuffer(" SELECT * FROM ( ");
      paginationSQL.append(" SELECT temp.* ,ROWNUM num FROM ( ");
      paginationSQL.append(sql);
      paginationSQL.append(" ) temp where ROWNUM <= " + lastIndex);
      paginationSQL.append(" ) WHERE num > " + startIndex);
      //裝入結(jié)果集
      setResultList(getJdbcTemplate().queryForList(paginationSQL.toString()));
      }
      /**
      * @param args
      */
      public static void main(String[] args) {
      // TODO Auto-generated method stub    }
      public int getCurrentPage() {
      return currentPage;
      }
      public void setCurrentPage(int currentPage) {
      this.currentPage = currentPage;
      }
      public int getNumPerPage() {
      return numPerPage;
      }
      public void setNumPerPage(int numPerPage) {
      this.numPerPage = numPerPage;
      }
      public List getResultList() {
      return resultList;    }
      public void setResultList(List resultList) {
      this.resultList = resultList;
      }
      public int getTotalPages() {
      return totalPages;
      }
      //計(jì)算總頁(yè)數(shù)
      public void setTotalPages() {
      if(totalRows % numPerPage == 0){
      this.totalPages = totalRows / numPerPage;
      }else{
      this.totalPages = (totalRows / numPerPage) + 1;
      }
      }
      public int getTotalRows() {
      return totalRows;
      }
      public void setTotalRows(int totalRows) {
      this.totalRows = totalRows;
      }
      public int getStartIndex() {
      return startIndex;
      }
      public void setStartIndex() {
      this.startIndex = (currentPage - 1) * numPerPage;
      }
      public int getLastIndex() {
      return lastIndex;
      }
      public JdbcTemplate getJTemplate() {
      return jTemplate;
      }
      public void setJTemplate(JdbcTemplate template) {
      jTemplate = template;
      }
      //計(jì)算結(jié)束時(shí)候的索引
      public void setLastIndex() {
      System.out.println("totalRows="+totalRows);///////////
      System.out.println("numPerPage="+numPerPage);///////////
      if( totalRows < numPerPage){
      this.lastIndex = totalRows;
      }else if((totalRows % numPerPage == 0) || (totalRows % numPerPage != 0 && currentPage < totalPages)){
      this.lastIndex = currentPage * numPerPage;
      }else if(totalRows % numPerPage != 0 && currentPage == totalPages){//最后一頁(yè)
      this.lastIndex = totalRows ;
      }
      }}在我的業(yè)務(wù)邏輯代碼中:
      /**
      * find season ranking list from DC
      * @param areaId 選手區(qū)域id
      * @param rankDate 賽季
      * @param category 類別
      * @param characterName 角色名
      * @return List
      */
      public List findSeasonRankingList(Long areaId, int rankYear,int rankMonth,
      Long categoryId,String characterName) {
      //SQL語(yǔ)句
      StringBuffer sql = new StringBuffer(" SELECT C.USERID userid,D.POSNAME posname,C.GAMEID gameid,C.AMOUNT amount,C.RANK rank FROM ");
      //表            sql.append(" (SELECT B.USERID USERID,");
      sql.append(" B.POSID POSID,");
      sql.append(" A.DISTRICT_CODE DISTRICTCODE,");
      sql.append(" A.GAMEID GAMEID,");
      sql.append(" AMOUNT AMOUNT,");
      sql.append(" RANK RANK ");
      sql.append(" FROM TB_FS_RANK A ");
      sql.append(" LEFT JOIN TB_CHARACTER_INFO B ");
      sql.append(" ON A.DISTRICT_CODE = B.DISTRICT_CODE ");
      sql.append(" AND A.GAMEID = B.GAMEID ");
      //附加條件
      if(areaId != null && areaId.intValue() != 0){
      sql.append(" and A.DISTRICT_CODE = " + areaId.intValue());
      }
      if( rankYear > 1970 && rankMonth > 0){
      //hql.append(" and sas.id.dt >= to_date('" + rankYear + "-" + rankMonth + "-01 00:00:00'," + "YYYY-MM-DD HH24:MI:SS");
      //hql.append(" and sas.id.dt <= to_date('" + rankYear + "-" + rankMonth + "-" + TimeTool.findMaxDateInMonth(rankYear,rankMonth) + " 23:59:59'," + "YYYY-MM-DD HH24:MI:SS");
      sql.append(" and A.DT = fn_time_convert(to_date('" + rankYear + "-" + rankMonth + "'," + "'YYYY-MM')) ");
      }
      if(categoryId != null && categoryId.intValue() != 0){
      sql.append(" and A.CID = " + categoryId.intValue());
      }
      if(characterName != null && !characterName.trim().equals("")){
      sql.append(" and A.GAMEID = '" + characterName.trim()+"' ");
      }
      sql.append(" ORDER BY RANK ASC) C ");
      sql.append(" LEFT JOIN TB_FS_POSITION D ");
      sql.append(" ON C.POSID = D.POSID ");
      sql.append(" ORDER BY C.RANK ");
      System.out.println("hql="+sql.toString());////////////////
      //使用自己的分頁(yè)程序控制結(jié)果集
      Pagination pageInfo = new Pagination(sql.toString(),1,10,getJdbcTemplate());
      return pageInfo.getResultList();
      //return getJdbcTemplate().queryForList(sql.toString());
      }?
    非常簡(jiǎn)單但有使用的分頁(yè)條件判斷語(yǔ)句。

    if ($page <= 1) {
    ??????????? $page_str .= "[首頁(yè)][上一頁(yè)]";
    ??????? } else {
    ??????????? $page_str .= "[<a href=$PHP_SELF?module=$module&page=1>首頁(yè)</a>][<a href=$PHP_SELF?module=$module&page=".($page-1).">上一頁(yè)</a>]";
    ??????? }
    ??????? if ($page >= $page_total) {
    ??????????? $page_str .= "[下一頁(yè)][尾頁(yè)]";
    ??????? } else {
    ??????????? $page_str .= "[<a href=$PHP_SELF?module=$module&page=".($page+1).">下一頁(yè)</a>][<a href=$PHP_SELF?module=$module&page=$page_total>尾頁(yè)</a>]";
    ??????? }
    嘿嘿,時(shí)候不早了,順帶推薦首歌給各位夜貓:http://61.156.33.18/yy/男歌手/光良/第一次/我想去個(gè)地方.mp3
    posted on 2006-05-03 03:35 船長(zhǎng) 閱讀(7845) 評(píng)論(4)  編輯  收藏

    評(píng)論:
    # re: spring分頁(yè)匯總 2008-04-27 20:18 | 惠萬(wàn)鵬
    船長(zhǎng),我看了很多spring 分頁(yè)的博客,就您的不錯(cuò)。對(duì)我有不少的啟發(fā)和幫助。謝謝。  回復(fù)  更多評(píng)論
      
    # re: spring分頁(yè)匯總 2008-04-27 20:36 | 惠萬(wàn)鵬
    不過(guò),在真實(shí)項(xiàng)目如此用法的較少。
    查找多條記錄我通常如下定義接口:
    public ResSel select(ReqSel rs){
    return null
    }
    分頁(yè)專門有一個(gè)PageBar,沒(méi)放在DAO之中。  回復(fù)  更多評(píng)論
      
    # re: spring分頁(yè)匯總 2010-04-01 09:56 | JACKYRONG
    hi,能否發(fā)個(gè)完整代碼給我參考下呢?  回復(fù)  更多評(píng)論
      
    # re: spring分頁(yè)匯總[未登錄](méi) 2012-03-20 15:08 | 123

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日本免费人成视频播放| 亚洲AV综合色区无码一区爱AV | 精品香蕉在线观看免费| 亚洲最大无码中文字幕| 亚洲国产成人久久精品大牛影视| 宅男666在线永久免费观看| 国产一级片免费看| 久久精品国产亚洲av品善| 亚洲毛片αv无线播放一区| 国产又黄又爽胸又大免费视频| 亚洲天堂在线视频| 91av视频免费在线观看| 老外毛片免费视频播放| 亚洲?V乱码久久精品蜜桃| 国产精品免费观看调教网| 亚洲高清不卡视频| 亚洲成av人片天堂网老年人| 最近免费mv在线电影| 色多多A级毛片免费看| 在线精品亚洲一区二区小说| 国产精品99久久免费观看| 日本亚洲欧美色视频在线播放| 亚洲日韩图片专区第1页| 国产一级理论免费版| CAOPORN国产精品免费视频| 精品国产_亚洲人成在线高清 | AV无码免费永久在线观看| 四虎影视在线看免费观看| 国产精品亚洲精品| 国产一级淫片免费播放| 最近中文字幕高清免费中文字幕mv| 日产久久强奸免费的看| 亚洲VA中文字幕不卡无码| 免费看国产曰批40分钟| 在线看片免费不卡人成视频| 免费福利资源站在线视频| 国产精品亚洲综合久久| 亚洲精品美女在线观看| 久久精品国产亚洲AV麻豆不卡| 亚洲免费黄色网址| 亚洲日本一区二区|