这个分页采用的是oracle的后台分页,但是却没有将他分层。因为只是写给别人的一个小参考。而我也是扒的别人的代码,不过在自己机器上调试还是通过了的。之前一直知道分页,但是自己还真没有写过分页。只有毕业设计的时候写过,现在看看惨不忍睹,一开始就是一个select * 从数据库里面全部取出来,然后放到一个List里面。而这个确实后台分页。因为是扒的别人的代码所以有点凌乱,不过对自己理解分页却还是不过。那个人呢的注释很详细。
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import cn.ac.caf.ld.pojo.LinDiXianZhuang;
@Controller
public class Pagination {
private Log log = LogFactory.getLog(Pagination.class);
private static final int NUMBERS_PER_PAGE = 10;
// 一页显示的记录数
private int numPerPage;
// 记录总数
private int totalRows;
// 总页数
private int totalPages;
// 当前页码
private int currentPage;
// 起始行数
private int startIndex;
// 结束行数
private int lastIndex;
// 结果集存放List
private List resultList;
@Autowired
private JdbcTemplate jdbcTemplate;
public Pagination() {
}
/**
* * 每页显示10条记录的构造函数,使用该函数必须先给Pagination设置currentPage,jTemplate初值 * @param
* sql oracle语句
*/
public Pagination(String sql, int currentPage, int numPerPage,
JdbcTemplate jdbcTemplate) {
// 设置每页显示记录数
setNumPerPage(numPerPage);
// 设置要显示的页数
setCurrentPage(currentPage);
// 计算总记录数
StringBuffer totalSQL = new StringBuffer(" SELECT count(*) FROM ( ");
totalSQL.append(sql);
totalSQL.append(" ) ");
setJdbcTemplate(jdbcTemplate);
// 总记录数
setTotalRows(getJdbcTemplate().queryForInt(totalSQL.toString()));
// 计算总页数
setTotalPages();
// 计算起始行数
setStartIndex();
// 计算结束行数
setLastIndex();
// 构造oracle数据库的分页语句
StringBuffer paginationSQL = new StringBuffer(" SELECT * FROM ( ");
paginationSQL.append(" SELECT A.* , ROWNUM RN FROM ( ");
paginationSQL.append(sql);
paginationSQL.append(" ) A WHERE ROWNUM <= " + lastIndex);
paginationSQL.append(" and qsdm!='00' and qydm!='00' ) WHERE RN > "
+ startIndex);
log.info(totalSQL);
log.info(paginationSQL);
// 装入结果集
setResultList(getJdbcTemplate().queryForList(paginationSQL.toString()));
final List<LinDiXianZhuang> ldMessage = new ArrayList<LinDiXianZhuang>();
jdbcTemplate.query(paginationSQL.toString(), new RowCallbackHandler() {
@Override
public void processRow(ResultSet rs) throws SQLException {
LinDiXianZhuang linDiXianZhuang = new LinDiXianZhuang();
setAllProperty(rs, linDiXianZhuang);
ldMessage.add(linDiXianZhuang);
}
});
setResultList(ldMessage);
log.info(getJdbcTemplate().queryForList(paginationSQL.toString()));
}
//这个是通过服务器访问测试
@RequestMapping(value = "/page.do")
public ModelAndView page(@RequestParam("currentPage") int currentPage,
HttpServletRequest request, HttpServletResponse response) {
String sql = "select * from t_sta_01_2010";
Pagination pageInfo = new Pagination(sql.toString(), currentPage, 10,
jdbcTemplate);
log.info("总页数" + pageInfo.getTotalPages());
log.info("总记录数:" + pageInfo.getTotalRows());
pageInfo.getTotalPages();
pageInfo.getResultList();
pageInfo.getStartIndex();
pageInfo.getLastIndex();
ModelAndView mv = new ModelAndView();
mv.addObject("result", pageInfo.getResultList());
mv.addObject("totalRows",pageInfo.getTotalRows());
mv.addObject("totalPage",pageInfo.getTotalPages());
mv.addObject("startIndex", pageInfo.getStartIndex());
mv.addObject("lastIndex", pageInfo.getLastIndex());
mv.setViewName("page");
return mv;
}
//这是用来测试,不需要跑tomcat。不过可以采用junit
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext.xml");
DataSource dataSource = (DataSource) ctx.getBean("dataSource");
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = "select * from t_sta_01_2010";
Pagination pageInfo = new Pagination(sql.toString(), 2, 10,
jdbcTemplate);
pageInfo.getTotalPages();
}
// 计算起始行数
public void setStartIndex() {
this.startIndex = (currentPage - 1) * numPerPage;
}
// 计算总页数
public void setTotalPages() {
if (totalRows % numPerPage == 0) {
this.totalPages = totalRows / numPerPage;
} else {
this.totalPages = (totalRows / numPerPage) + 1;
}
}
public void setLastIndex() {
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) {
// 最后一页
this.lastIndex = totalRows;
}
}
public int getNumPerPage() {
return numPerPage;
}
public void setNumPerPage(int numPerPage) {
this.numPerPage = numPerPage;
}
public int getTotalRows() {
return totalRows;
}
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
public int getTotalPages() {
return totalPages;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getStartIndex() {
return startIndex;
}
public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}
public int getLastIndex() {
return lastIndex;
}
public void setLastIndex(int lastIndex) {
this.lastIndex = lastIndex;
}
public List getResultList() {
return resultList;
}
public void setResultList(List resultList) {
this.resultList = resultList;
}
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
/**
* 封装所有林地信息
* */
public void setAllProperty(ResultSet rs, LinDiXianZhuang linDiXianZhuang)
throws SQLException {
//垃圾代码。就不贴出来了
}
可以通过http://localhost:8080/xxx/page.do?currentPage=xx来访问了。代码没有优化过,只是为了记忆
分享到:
相关推荐
在这个"java实现的一个分页程序"中,我们可以探讨几个关键知识点: 1. **JDBC分页**:Java中的分页通常通过Java Database Connectivity (JDBC) API来实现。使用PreparedStatement和Statement对象,我们可以在SQL...
"mybatis 分页自己写的一个分页"这个项目正是针对这一需求,提供了一种自定义的分页解决方案。MyBatis作为一款轻量级的Java持久层框架,它允许开发者自由地编写SQL语句,同时也支持自定义分页策略。 在传统的物理...
"servlet分页(自己写的一个分页,每次做项目都用这个)" 是一个自定义的Servlet实现,它提供了基本的分页功能,适用于各种需要展示大量数据的Web应用程序。下面我们将深入探讨Servlet分页的核心概念、实现方式以及与...
这里提到的"JAVA自己写的一个分页类"是一个自定义实现的分页解决方案,它包含一个辅助类、一个JSP页面、一个CSS文件以及作者编写的主类。下面我们将详细讨论这些知识点。 1. **分页类**:分页类通常包括以下几个...
这个"php的一个分页类.zip"文件提供了一个预封装的分页类,可以帮助开发者快速实现分页功能,无需从零开始编写代码。下面将详细介绍PHP分页类的核心概念、工作原理以及如何使用。 一、分页类核心概念 1. 总记录数...
"一个分页page技术"的标题表明我们将讨论如何实现一个类似Google分页功能的解决方案。这个功能使得用户可以方便地浏览和导航大量数据,而不需要一次性加载所有内容,从而提高用户体验并减轻服务器负担。 描述中提到...
- **工厂模式**:可以创建一个分页类工厂,根据不同的参数生成不同的分页对象。 - **单例模式**:确保整个应用中只有一个分页实例,减少资源消耗。 - **策略模式**:允许根据不同的分页策略(如简单的数字分页、...
总的来说,这个"mysql:一个分页php类库.zip"文件提供了一个强大的工具,简化了PHP与MySQL数据库之间的分页处理,有助于开发者构建高效、友好的Web应用。通过使用这样的类库,我们可以更专注于业务逻辑,而不是被...
这里我们主要探讨的是如何使用Struts2框架与Hibernate ORM工具来实现一个分页功能。Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web应用框架,而Hibernate则是一个强大的对象关系映射(ORM)工具...
这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,
标题中的“很好的一个分页 js”表明我们讨论的是一个JavaScript库或插件,主要用于实现网页的分页功能。在Web开发中,分页是处理大量数据时常见的需求,它允许用户逐页浏览内容,提高用户体验并减少加载时间。这篇...
本篇文章将详细讲解标题为"PHP写的一个分页类"的实现原理,以及如何利用这个分页类来优化网页的用户体验。 首先,让我们了解分页的基本概念。分页是将数据库查询结果分成若干部分,每次只加载一部分到网页上,通过...
标题中的“用JQuery做的一个分页效果”指的是使用JavaScript库JQuery实现的网页分页功能。在网页中,特别是数据量较大的时候,为了提高用户体验和加载速度,通常会采用分页显示数据,而不是一次性加载所有内容。...
在描述中提到的“自己写的一个分页控件,可以实现dataGridView的分页显示”,这通常指的是为Windows Forms或WPF应用程序创建一个自定义的分页组件,用于处理大量数据在dataGridView中的展示。 dataGridView是.NET...
这个分页示例展示了如何将JSP、JavaScript、AJAX和数据库技术结合,实现一个功能完备、用户体验良好的分页系统。通过学习这个例子,开发者可以更好地理解这些技术在实际项目中的应用,为自己的网页开发打下坚实的...
很实用值得借鉴的一个分页例子,性能高,只需要传你要的参数就可以实用了
ASP的一个分页类,使用方法在代码注释里!简单的分页class
MS Sql的一个分页存储过程 - wsmall的专栏 一个分页储存的过程
winform 的一个前台 分页控件,项目用了devExpress控件组。 你也可以不用,用普通的按钮,输入框代替,后台代码都是基本一样。 用法,工具箱,选择项,浏览,选 xpager.dll就有了。 有个 OnPageChanged 事件,里面写...
1. **创建Store**:定义一个Store,并配置分页参数,如`paging : true`,`pageSize : 25`,表示每页显示25条记录。 2. **配置Proxy**:设置Store的Proxy,指定数据源并处理分页请求,如使用`new JsonPProxy('data....