`
zhq_tony
  • 浏览: 30187 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(原创) Spring jdbctemplate 分页改造 (一)

阅读更多

最近项目中使用到了JBDCTemplate ,小弟不才,没发现其中包括分页的功能,只好自己做了一个简单的分页功能。下面把心得和源代码分享给大家。

用到了2个类,都是封装好的,如下:

1.page类

用于分页的对象,算是BO了,不只是简单的封装Page的属性,还做了一点点逻辑

/**
*
*/
package com.hipay.bo;

import java.util.ArrayList;
import java.util.List;

/**
* @author TonyDev
*
*/
public class Page {

private int pageCount=1;

private int currentPage=1;

private int pageSize=10;

private int maxPage=1;

private List resultSet=new ArrayList();

public int getCurrentPage() {
checkPage();
return currentPage;
}

private void initMaxPage()
{
this.maxPage = (this.pageCount + this.pageSize - 1) / this.pageSize;
}
public void setCurrentPage(int currentPage) {

this.currentPage = currentPage;
}

public int getMaxPage() {

return this.maxPage;
}

public void setMaxPage(int maxPage) {
this.maxPage = maxPage;
}

public int getPageCount() {
return pageCount;
}

public void setPageCount(int pageCount) {

this.pageCount = pageCount;
initMaxPage();
}

public int getPageSize() {
return pageSize;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}

public List getResultSet() {
return resultSet;
}

public void setResultSet(List resultSet) {
this.resultSet = resultSet;
}

private void checkPage()
{
if(this.currentPage<1)
this.currentPage=1;
if(this.currentPage>this.maxPage)
this.currentPage=this.maxPage;
}

}

2.PageTemplate

用于分离出ResultSet,并装载Page对象

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.SqlProvider;
import org.springframework.jdbc.core.StatementCallback;
import org.springframework.jdbc.support.JdbcUtils;
import org.springframework.util.Assert;

/**
* @author TonyDev
*
*/

public class PageTemplate extends JdbcTemplate {

private Page page = new Page();

public List queryForPage(final String sql, final RowMapper rowMapper)
throws DataAccessException {
Assert.notNull(sql, "SQL must not be null");
if (logger.isDebugEnabled()) {
logger.debug("Executing SQL query [" + sql + "]");

}

// 重新构造的statementCallback实现
class QueryStatementCallback implements StatementCallback, SqlProvider {
public Object doInStatement(Statement stmt) throws SQLException {
ResultSet rs = null;
try {
rs = stmt.executeQuery(sql);

return ResultSetForList(rs, rowMapper);

} finally {
JdbcUtils.closeResultSet(rs);
}
}

public String getSql() {
return sql;
}
}
return (List) execute(new QueryStatementCallback());
}


/**
* 分页之后,填充到以对象形式存储的List 中
*
* @param rs
* 记录集
* @param rm
* 对象转换填充器
* @return List
* @throws SQLException
*/
private List ResultSetForList(ResultSet rs, RowMapper rm) {
List listArray = new ArrayList();

try {
int i = 0;
rs.last();
page.setPageCount(rs.getRow());

rs.absolute(page.getPageSize() * (page.getCurrentPage() - 1) + 1);

while (i < page.getPageSize() && rs.getRow() > 0) {
listArray.add(rm.mapRow(rs, rs.getRow()));
rs.next();
i++;
}

} catch (SQLException e) {
// TODO Auto-generated catch block
logger.error("SQLException: " + e.getMessage());
} finally {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
logger.error("SQLException: " + e.getMessage());
}
}
return listArray;

}

public Page getPage() {
return page;
}

public void setPage(Page page) {
this.page = page;
}

}

以上红色的部分是最重要的部分,分离ResultSet对象从这里开始。如果大侠们觉得我写得很烂可以自己实现这部分。

好了,记录集里的对象被填充到实体对象中去了。

 

分享到:
评论

相关推荐

    使用Spring的JdbcTemplate实现分页功能

    使用Spring的JdbcTemplate实现分页功能

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

    在Java的Spring框架中,`JdbcTemplate`是一个非常重要的组件,它提供了数据库操作的简单抽象,使得开发者可以方便地执行SQL语句而无需编写复杂的DAO(数据访问对象)层。在处理大量数据时,传统的分页方法可能会导致...

    Spring jdbctemplate + mysql 分页封装

    综上所述,Spring JdbcTemplate结合MySQL的分页查询封装涉及到的主要知识点有:Spring的JdbcTemplate用法、MySQL的分页查询(LIMIT和OFFSET)、结果集映射、分页结果对象的构建、以及代码封装与复用。通过这些技术,...

    SpringJdbcTemplate封装工具类

    SpringJdbcTemplate支持分页查询,通过`SimpleJdbcCall`或`NamedParameterJdbcCall`类,可以配合`RowCallbackHandler`或`ResultSetExtractor`处理分页结果。此外,还可以使用`JdbcPagingItemReader`作为Spring ...

    spring jdbctemplate实例

    Spring的JdbcTemplate是Spring框架中的一个核心组件,用于简化数据库操作。它提供了一种模板方法模式,抽象出了一些常见的数据库访问任务,使得开发者无需关注低级的JDBC细节,如打开和关闭连接、处理结果集等,从而...

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

    ### Oracle + jdbcTemplate + Spring...综上所述,通过以上步骤,我们可以实现一个完整的Oracle + jdbcTemplate + Spring + Java + Flex分页系统。这种方式不仅能够提高数据处理效率,还能够为用户提供更好的用户体验。

    Spring--JdbcTemplate.pdf

    标题中提到的"JdbcTemplate"是Spring框架中提供的一个用于简化数据库操作的JDBC抽象库。它是对Java标准数据库编程接口JDBC的一种封装,旨在简化JDBC编程,减少样板代码,使得开发者在使用Spring框架时能够更便捷地对...

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

    本文档主要讨论如何利用Oracle存储过程、jdbcTemplate(Spring框架的一个组件)以及Flex前端实现这一功能。 首先,Oracle存储过程是实现分页的关键部分。在Oracle中,可以通过创建存储过程来动态构造SQL语句,以...

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

    EasyFramework-Data 是一个基于 Spring JdbcTemplate 的轻量级数据访问框架,它简化了数据库操作,提供了更加简洁、安全的API,旨在提高开发效率,降低项目中的数据库访问复杂性。这个框架适用于使用Java语言进行...

    SpringMvc+jdbcTemplate+mysql(注解)

    Spring MVC结合JdbcTemplate,可以通过注解的方式定义一个接收POST请求的控制器方法,处理表单提交的数据,使用JdbcTemplate的insert方法将新用户信息存储到数据库中。 【分页显示】 分页显示数据是Web应用中的常见...

    SpringMVC+JDBC:分页示例

    首先,你需要创建一个数据访问对象(DAO),使用JdbcTemplate的方法来执行分页查询。例如: ```java public interface UserRepository { List&lt;User&gt; findUsersByPage(int pageNum, int pageSize); } @Service ...

    ssh2分页查询

    在SSH2框架中,我们可以利用Spring的JdbcTemplate或Hibernate的Criteria API来实现分页查询。 1. **Spring JdbcTemplate的分页查询**: Spring的JdbcTemplate提供了一套简便的SQL执行方法,包括分页查询。我们可以...

    spring mvc学习+数据分页+数据导入导出

    在描述中提到的`jdbcTemplate`是Spring Data Access模块的一部分,它提供了一种简单的方式来访问数据库。JdbcTemplate允许我们执行SQL查询、更新操作等,同时处理了异常转换、事务管理等繁琐的工作,使得数据库操作...

    JDBCTemplate+JavaPOJO实现通用DAO

    为了简化JDBC的使用,Spring框架提供了JDBCTemplate,它是一个基于模板方法设计模式的数据库访问类,能够帮助我们更安全、更高效地执行SQL语句。在这个"JDBCTemplate+JavaPOJO实现通用DAO"的项目中,我们将探讨如何...

    使用spring框架,实现单表增删改查、条件查询和分页、文件上传

    在本文中,我们将深入探讨如何使用Spring框架,特别是Spring MVC和JdbcTemplate,来实现一个功能齐全的数据操作系统,包括单表的增删改查、条件查询以及分页功能,并涉及文件上传。对于初学者来说,这是一个很好的...

    Hibernate+spring+struts2分页

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

    Spring登录Demo

    通过Spring搭建底层框架,运用Spring jdbcTemplate进行数据底层操作 测试: 1.导入HomeWork.sql脚本 2.启动tomcat,访问http://localhost:8080/MyHomeWork/login.jsp 账户名和密码默认都是admin,通过获取Session...

    java 数据分页显示

    分页是将一个大型数据集分割成多个小部分,每个部分称为一页,用户可以逐页浏览,而不是一次性加载所有数据。在Web应用中,这通常涉及到后端服务器与数据库的交互以及前端的UI设计。 1. **查询策略**:在数据库层面...

    spring_JDBC整合包

    1. **JdbcTemplate**: 这是Spring JDBC的核心接口,提供了一组用于执行SQL语句的方法,如`update()`, `query()`, `execute()`等。它能处理数据库连接的打开和关闭,事务管理,异常处理等,让开发者专注于SQL语句本身...

Global site tag (gtag.js) - Google Analytics