`

JdbcTemplate扩展分页

阅读更多

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;

 /**
  * 默认构造器,调用此方法初始化,需要调用setDataSource设置数据源
  */
 public JdbcTemplateExtend() {
 }

 /**
  * 初始构造器
  *
  * @param dataSource
  *            数据源
  */
 public JdbcTemplateExtend(DataSource dataSource) {
  this.dataSource = dataSource;
  super.setDataSource(dataSource);
 }

 /**
  * 普通分页查询<br>
  * <b>如果结果结合比较大应该调用setFetchsize() 和setMaxRow两个方法来控制一下,否则会内存溢出</b>
  *
  * @see #setFetchSize(int)
  * @see #setMaxRows(int)
  * @param sql
  *            查询的sql语句
  * @param startRow
  *            起始行
  * @param rowsCount
  *            获取的行数
  * @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>如果结果结合比较大应该调用setFetchsize() 和setMaxRow两个方法来控制一下,否则会内存溢出</b>
  *
  * @see #setFetchSize(int)
  * @see #setMaxRows(int)
  * @param sql
  *            查询的sql语句
  * @param startRow
  *            起始行
  * @param rowsCount
  *            获取的行数
  * @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;// 结果集合的长度
 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;
 }

 /**
  * 处理结果集合,被接口自动调用,该类外边不应该调用
  */
 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;
 }
}


分享到:
评论

相关推荐

    jdbcTemplate分页彻底解决,使用游标滚动

    `JdbcTemplateExtend.java`可能扩展了`JdbcTemplate`类,添加了对游标分页的支持。它可能包含了一个或多个方法,用于封装上述步骤,使代码更加简洁易用。 在实际应用中,我们可能还需要考虑并发和性能优化,例如,...

    Oracle + jdbcTemplate + Spring + Java + Flex 实现分页.docx

    总结起来,实现Oracle + jdbcTemplate + Spring + Java + Flex的分页查询,主要涉及以下步骤: 1. 在Oracle中创建存储过程,处理分页逻辑和计数。 2. 使用Spring的jdbcTemplate调用存储过程,处理输入输出参数。 3. ...

    JDBCTemplate+JavaPOJO实现通用DAO

    8. **性能优化**:JDBCTemplate支持批处理、分页查询等优化技巧,可以根据需求进行配置。 博客链接中提到的内容可能详细解释了如何配置和使用这些组件,并提供了实际的代码示例。通过这个项目,你可以学习到如何...

    最好用的分页代码(java版)

    总结起来,这个Java分页代码设计简洁,具有很好的灵活性,可以根据不同的应用场景进行扩展。它通过`JdbcTemplate`与数据库交互,既可以一次性加载数据后分页,也可以按需从数据库获取数据,适应性强。同时,通过`...

    struts2 分页 多数据库连接

    例如,你可以使用Spring的JdbcTemplate或者MyBatis这样的ORM框架来简化数据库操作。 在你提供的描述中提到了"unit",这可能指的是JUnit,一个用于单元测试的Java框架。在开发过程中,进行单元测试是非常重要的,它...

    springMVC实现分页代码Mysql版本的

    在IT行业中,SpringMVC和MySQL是两个非常重要的技术组件,它们经常被用来构建高效、可扩展的企业级Web应用程序。SpringMVC作为Spring框架的一部分,主要用于处理HTTP请求和响应,而MySQL则是一种广泛使用的开源关系...

    JspPageControlor分页插件

    该插件的核心理念是将分页逻辑与业务逻辑分离,使页面显示和数据处理更加清晰,有利于代码维护和扩展。 ### 2. 工作原理 JspPageController通过接收前端发送的请求参数,如当前页码、每页显示数量等,来计算出数据...

    Hibernate+spring+struts2分页

    Spring JDBC模块中的`JdbcTemplate`或`NamedParameterJdbcTemplate`可以方便地实现分页查询,通过设置页码和每页大小来获取所需数据。 **Struts2** Struts2作为MVC框架,负责处理用户的请求并展示结果。它提供了...

    Struts + DAO分页

    return jdbcTemplate.query(sql, new Object[]{pageSize, pageSize * (pageNum - 1)}, new UserRowMapper()); } ``` 3. **控制器(Controller)**:在Struts的动作类(Action)中,处理用户的请求,计算当前页数...

    struts2+MySQL分页(精).pdf

    同时,为了提高代码的可维护性和重用性,可以考虑使用更高级的DAO设计模式,比如工厂模式或Spring的JdbcTemplate。 在整合jQuery框架时,可以利用其强大的AJAX功能,使分页操作无刷新,提供更流畅的用户体验。例如...

    easyframework-data:基于 Spring JdbcTemplate 的数据访问框架

    - **分页查询**:内置分页查询支持,方便获取数据库记录的指定部分。 - **事务管理**:集成Spring的事务管理,确保数据一致性。 - **数据验证**:提供了基本的数据验证机制,可以在插入或更新数据前检查其有效性。...

    SSH增删改查+分页+图片上传

    在分页功能的实现上,开发者通常会结合Hibernate的Criteria API或HQL,配合Spring的JdbcTemplate或NamedParameterJdbcTemplate,来执行带有LIMIT和OFFSET子句的SQL,从而获取指定页码的数据。前端则可以通过AJAX或者...

    springmvc+mybatis+maven登陆、增删改查、分页实例-初学者必选(含数据库) zip文件

    - **Maven插件**:扩展Maven功能,如编译(maven-compiler-plugin)、测试(maven-surefire-plugin)等。 - **依赖管理**:Maven自动解决库依赖,避免版本冲突。 4. **数据库相关**: - **user.sql**:包含创建...

    Spring+DWR+EXT 技术的一个人事管理系统

    数据库连接池(常用的4-5个)、分页查询(oracle,mysql,sqlserver等)、数据转码(空值、特定、列名等)、数据导出(Pdf,excel,html,rtf,xml等)、日志处理、启动jar加载校验机制、扩展Hib、JdbcTemplate等等...

    基于实体属性/表列名的前后端自定义通用条件查询

    通过灵活运用JdbcTemplate和Gson,我们可以构建出强大且可扩展的查询系统,满足用户的各种查询需求。在实际开发中,还应注意安全性和性能优化,例如使用预编译的PreparedStatement来防止SQL注入,并考虑分页、排序等...

    SpringBoot整合hive-jdbc示例

    **SpringBoot整合Hive-JDBC详解** 在大数据处理领域,Hadoop生态中的Hive作为一个数据仓库工具,常常用于...这个简单的示例展示了基本的查询功能,实际应用中可以根据需求扩展更多的操作,例如插入、更新、删除等。

    springboot项目

    在业务逻辑中,可以使用`@Autowired`的`JdbcTemplate`或`JpaRepositories`来进行数据操作。 总结起来,这个SpringBoot项目展示了如何构建一个基于YML配置的全功能Web应用,集成了ORM框架Mybatis、日志系统Logback、...

    框架集成详解很简单很容易不好不要积分

    在Spring中集成Hibernate,可以使用Spring的JdbcTemplate或HibernateTemplate,使得数据库操作更加简洁和高效,同时Spring还能够帮助管理Hibernate的Session。 Ajax,即异步JavaScript和XML,是前端技术,它让网页...

    springboot 通用后台管理系统.zip

    1. 分页插件:引入Mybatis-Plus或PageHelper实现高效分页查询。 2. 日志管理:集成Logback或Log4j,记录系统日志,便于问题排查。 3. 缓存策略:考虑引入Redis或Memcached实现数据缓存,提高系统性能。 4. 异步任务...

    学生信息管理spring+struts2

    通常,Spring与Struts2结合时,会利用Spring的JdbcTemplate或者MyBatis等ORM(Object-Relational Mapping)框架来处理数据库交互。这些工具能简化SQL语句的编写,使得代码更加整洁。在这个系统中,可能有一个名为...

Global site tag (gtag.js) - Google Analytics