隨筆 - 6  文章 - 129  trackbacks - 0
          <2025年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿(14)

          隨筆檔案(6)

          文章分類(467)

          文章檔案(423)

          相冊(cè)

          收藏夾(18)

          JAVA

          搜索

          •  

          積分與排名

          • 積分 - 829819
          • 排名 - 49

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          這里用的是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());
            }
          文章來(lái)源:http://java.chinaitlab.com/Spring/38091.html

          posted on 2008-04-20 19:32 Ke 閱讀(5035) 評(píng)論(0)  編輯  收藏 所屬分類: springjdbcpagination
          主站蜘蛛池模板: 沭阳县| 潢川县| 双鸭山市| 阳城县| 西畴县| 固安县| 普陀区| 韶关市| 隆德县| 铜川市| 梓潼县| 江阴市| 海兴县| 淮北市| 孟连| 屯留县| 张家川| 酒泉市| 成都市| 睢宁县| 呼图壁县| 福贡县| 镇江市| 安顺市| 广宗县| 德格县| 屯留县| 博爱县| 全州县| 天津市| 虹口区| 江山市| 仪陇县| 昌江| 柘荣县| 韶山市| 广南县| 南郑县| 汉源县| 芒康县| 平远县|