07年末我们开发小组一直在研究:如何基于spring实现sybase的分页查询。经历磨难后,由我师傅提出了一种奏效的解决方案:扩展spring的jdbcTemplate实现分页查询。这里记录下来,以备后用。
1.JdbcTemplateExtend.java
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> querySP(String sql, int startRow, int rowsCount)
throws DataAccessException
{
return querySP(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> querySP(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
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;
}
}
分享到:
相关推荐
`JdbcTemplateExtend.java`可能扩展了`JdbcTemplate`类,添加了对游标分页的支持。它可能包含了一个或多个方法,用于封装上述步骤,使代码更加简洁易用。 在实际应用中,我们可能还需要考虑并发和性能优化,例如,...
总结起来,实现Oracle + jdbcTemplate + Spring + Java + Flex的分页查询,主要涉及以下步骤: 1. 在Oracle中创建存储过程,处理分页逻辑和计数。 2. 使用Spring的jdbcTemplate调用存储过程,处理输入输出参数。 3. ...
8. **性能优化**:JDBCTemplate支持批处理、分页查询等优化技巧,可以根据需求进行配置。 博客链接中提到的内容可能详细解释了如何配置和使用这些组件,并提供了实际的代码示例。通过这个项目,你可以学习到如何...
Spring JDBC模块中的`JdbcTemplate`或`NamedParameterJdbcTemplate`可以方便地实现分页查询,通过设置页码和每页大小来获取所需数据。 **Struts2** Struts2作为MVC框架,负责处理用户的请求并展示结果。它提供了...
Spring JdbcTemplate 是Spring框架的一部分,它提供了一种模板方法模式来执行SQL查询、更新和其他数据库操作。JdbcTemplate的主要优点包括: - **自动处理结果集**:它能将结果集映射到Java对象,无需手动遍历...
4. **实现Service**:在服务层,我们需要一个方法来执行分页查询并返回分页结果。使用`JdbcTemplate`的`query`方法,传入SQL语句、参数和结果处理器。 5. **处理Controller**:在控制器层,创建一个处理请求的HTTP...
【Java分页实现详解】 在Java开发中,分页是一种常见的功能,用于处理大量数据时,提高用户体验,避免一次性加载所有数据导致的性能问题。本文将深入解析标题为"最好用的分页代码(java版)"的实现,探讨如何在Java...
例如,你可以使用Spring的JdbcTemplate或者MyBatis这样的ORM框架来简化数据库操作。 在你提供的描述中提到了"unit",这可能指的是JUnit,一个用于单元测试的Java框架。在开发过程中,进行单元测试是非常重要的,它...
在本文中,我们将深入探讨如何将Spring MVC框架与MySQL数据库集成,实现基本的CRUD(创建、读取、更新和删除)操作,并特别关注时间段条件查询。Spring MVC是Spring框架的一部分,它为Web应用程序提供了模型-视图-...
一个基于Spring依赖注入特性的二级插件的模型,里面主要封装了如下特性:数据库连接池(常用的4-5个)、分页查询(oracle,mysql,sqlserver等)、数据转码(空值、特定、列名等)、数据导出(Pdf,excel,html,...
在Spring+Struts2的环境中,可以使用Struts2的拦截器或者Action类中的属性来处理分页参数,然后在DAO层根据这些参数构造分页查询的SQL语句。此外,前端页面也需要相应地显示分页链接,这通常需要Action返回一个包含...
经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...
总的来说,Struts2与MySQL的分页实现涉及数据库查询、Action处理和视图渲染等多个层面。理解并掌握这些概念有助于构建高效、可扩展的Java web应用。在实际开发中,还应考虑性能优化、错误处理和安全性等方面,以确保...
在分页功能的实现上,开发者通常会结合Hibernate的Criteria API或HQL,配合Spring的JdbcTemplate或NamedParameterJdbcTemplate,来执行带有LIMIT和OFFSET子句的SQL,从而获取指定页码的数据。前端则可以通过AJAX或者...
该插件的核心理念是将分页逻辑与业务逻辑分离,使页面显示和数据处理更加清晰,有利于代码维护和扩展。 ### 2. 工作原理 JspPageController通过接收前端发送的请求参数,如当前页码、每页显示数量等,来计算出数据...
经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...
对于性能,可以考虑使用分页、缓存策略,以及优化 SQL 查询。错误处理则需要确保有良好的日志记录和异常处理机制,以便于调试和维护。 总结来说,"extjs+spring+jdbc" 结合提供了从用户界面到数据存储的全方位解决...
**SpringBoot整合Hive-JDBC详解** 在大数据处理领域,Hadoop生态中的Hive作为一个数据仓库工具,常常用于...这个简单的示例展示了基本的查询功能,实际应用中可以根据需求扩展更多的操作,例如插入、更新、删除等。
2. **数据访问对象(DAO)**:在DAO实现类中,编写实际的数据库查询代码,可以使用JDBC、Hibernate、MyBatis等持久层框架。使用SQL的`LIMIT`和`OFFSET`子句来实现分页,例如: ```java List<User> queryByPage(int...
- “分页”是大数据量展示的常用手段,可以通过Spring的JdbcTemplate或Hibernate的Criteria API实现分页查询。 通过这样的集成,开发者可以构建出一个功能完备、易于维护的后台管理系统。FreesLin可能是这个系统的...