七郎's JavaBlog

          草木竹石皆可為劒。至人之用人若鏡,不將不迎,應(yīng)而不藏,故能勝物而不傷。
          posts - 60, comments - 14, trackbacks - 0, articles - 0

          JdbcTemplate擴(kuò)展分頁

          Posted on 2008-06-20 12:44 七郎歸來 閱讀(1123) 評論(0)  編輯  收藏

          1.JdbcTemplateExtend .java
          package rms.pub.main.web.test;

          import java.util.List;
          import java.util.Map;
          import javax.sql.*;
          import org.springframework.dao.DataAccessException;
          import org.springframework.jdbc.core.JdbcTemplate;
          import org.springframework.jdbc.core.RowMapper;

          public class JdbcTemplateExtend extends JdbcTemplate {
           private DataSource dataSource;

           /**
            * 默認(rèn)構(gòu)造器,調(diào)用此方法初始化,需要調(diào)用setDataSource設(shè)置數(shù)據(jù)源
            */
           public JdbcTemplateExtend() {
           }

           /**
            * 初始構(gòu)造器
            *
            * @param dataSource
            *            數(shù)據(jù)源
            */
           public JdbcTemplateExtend(DataSource dataSource) {
            this.dataSource = dataSource;
            super.setDataSource(dataSource);
           }

           /**
            * 普通分頁查詢<br>
            * <b>如果結(jié)果結(jié)合比較大應(yīng)該調(diào)用setFetchsize() 和setMaxRow兩個方法來控制一下,否則會內(nèi)存溢出</b>
            *
            * @see #setFetchSize(int)
            * @see #setMaxRows(int)
            * @param sql
            *            查詢的sql語句
            * @param startRow
            *            起始行
            * @param rowsCount
            *            獲取的行數(shù)
            * @return
            * @throws DataAccessException
            */
           @SuppressWarnings("unchecked")
           public List<Map> queryForListPage(String sql, int startRow, int rowsCount)
             throws DataAccessException {
            return queryForListPage(sql, startRow, rowsCount,
              getColumnMapRowMapper());
           }

           /**
            * 自定義行包裝器查詢<br>
            * <b>如果結(jié)果結(jié)合比較大應(yīng)該調(diào)用setFetchsize() 和setMaxRow兩個方法來控制一下,否則會內(nèi)存溢出</b>
            *
            * @see #setFetchSize(int)
            * @see #setMaxRows(int)
            * @param sql
            *            查詢的sql語句
            * @param startRow
            *            起始行
            * @param rowsCount
            *            獲取的行數(shù)
            * @param rowMapper
            *            行包裝器
            * @return
            * @throws DataAccessException
            */
           @SuppressWarnings("unchecked")
           public List<Map> queryForListPage(String sql, int startRow, int rowsCount,
             RowMapper rowMapper) throws DataAccessException {
            return (List) query(sql, new SplitPageResultSetExtractor(rowMapper,
              startRow, rowsCount));
           }

           public DataSource getDataSource() {
            return dataSource;
           }

           public void setDataSource(DataSource dataSource) {
            this.dataSource = dataSource;
            super.setDataSource(dataSource);
           }
          }


          2. SplitPageResultSetExtractor .java

          package rms.pub.main.web.test;

          import java.sql.*;
          import java.util.*;
          import org.springframework.dao.DataAccessException;
          import org.springframework.jdbc.core.ResultSetExtractor;
          import org.springframework.jdbc.core.RowMapper;
          import org.springframework.util.Assert;

          public class SplitPageResultSetExtractor implements ResultSetExtractor {
           private final int start;// 起始行號
           private final int len;// 結(jié)果集合的長度
           private final RowMapper rowMapper;// 行包裝器

           public SplitPageResultSetExtractor(RowMapper rowMapper, int start, int len) {
            Assert.notNull(rowMapper, "RowMapper is required");
            this.rowMapper = rowMapper;
            this.start = start;
            this.len = len;
           }

           /**
            * 處理結(jié)果集合,被接口自動調(diào)用,該類外邊不應(yīng)該調(diào)用
            */
           public Object extractData(ResultSet rs) throws SQLException,
             DataAccessException {
            List result = new ArrayList();
            int rowNum = 0;
            int end = start + len;
            point: while (rs.next()) {
             ++rowNum;
             if (rowNum < start) {
              continue point;
             } else if (rowNum >= end) {
              break point;
             } else {
              result.add(this.rowMapper.mapRow(rs, rowNum));
             }
            }
            return result;
           }
          }



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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 禄丰县| 南溪县| 洮南市| 大荔县| 沂源县| 洛隆县| 海伦市| 扶风县| 舒城县| 广昌县| 彭山县| 大埔区| 玉田县| 象州县| 盐亭县| 大城县| 五寨县| 和林格尔县| 抚松县| 应城市| 台州市| 霍邱县| 台南县| 桃园市| 潜江市| 朔州市| 敦煌市| 南岸区| 额尔古纳市| 神池县| 庆城县| 获嘉县| 大关县| 滨州市| 叶城县| 嘉善县| 金阳县| 页游| 灌云县| 凤凰县| 西畴县|