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

一个分页

阅读更多

    这个分页采用的是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实现的一个分页程序

    在这个"java实现的一个分页程序"中,我们可以探讨几个关键知识点: 1. **JDBC分页**:Java中的分页通常通过Java Database Connectivity (JDBC) API来实现。使用PreparedStatement和Statement对象,我们可以在SQL...

    mybatis 分页自己写的一个分页

    "mybatis 分页自己写的一个分页"这个项目正是针对这一需求,提供了一种自定义的分页解决方案。MyBatis作为一款轻量级的Java持久层框架,它允许开发者自由地编写SQL语句,同时也支持自定义分页策略。 在传统的物理...

    servlet分页(自己写的一个分页,每次做项目都用这个)

    "servlet分页(自己写的一个分页,每次做项目都用这个)" 是一个自定义的Servlet实现,它提供了基本的分页功能,适用于各种需要展示大量数据的Web应用程序。下面我们将深入探讨Servlet分页的核心概念、实现方式以及与...

    JAVA自己写的一个分页类 大家可以看看

    这里提到的"JAVA自己写的一个分页类"是一个自定义实现的分页解决方案,它包含一个辅助类、一个JSP页面、一个CSS文件以及作者编写的主类。下面我们将详细讨论这些知识点。 1. **分页类**:分页类通常包括以下几个...

    php的一个分页类.zip

    这个"php的一个分页类.zip"文件提供了一个预封装的分页类,可以帮助开发者快速实现分页功能,无需从零开始编写代码。下面将详细介绍PHP分页类的核心概念、工作原理以及如何使用。 一、分页类核心概念 1. 总记录数...

    一个分页page技术

    "一个分页page技术"的标题表明我们将讨论如何实现一个类似Google分页功能的解决方案。这个功能使得用户可以方便地浏览和导航大量数据,而不需要一次性加载所有内容,从而提高用户体验并减轻服务器负担。 描述中提到...

    php 分页类 很实用的一个分页类

    - **工厂模式**:可以创建一个分页类工厂,根据不同的参数生成不同的分页对象。 - **单例模式**:确保整个应用中只有一个分页实例,减少资源消耗。 - **策略模式**:允许根据不同的分页策略(如简单的数字分页、...

    mysql:一个分页php类库.zip

    总的来说,这个"mysql:一个分页php类库.zip"文件提供了一个强大的工具,简化了PHP与MySQL数据库之间的分页处理,有助于开发者构建高效、友好的Web应用。通过使用这样的类库,我们可以更专注于业务逻辑,而不是被...

    strute+hibernate写的一个分页

    这里我们主要探讨的是如何使用Struts2框架与Hibernate ORM工具来实现一个分页功能。Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web应用框架,而Hibernate则是一个强大的对象关系映射(ORM)工具...

    这是我个人写的一个分页类

    这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,

    很好的一个分页 js

    标题中的“很好的一个分页 js”表明我们讨论的是一个JavaScript库或插件,主要用于实现网页的分页功能。在Web开发中,分页是处理大量数据时常见的需求,它允许用户逐页浏览内容,提高用户体验并减少加载时间。这篇...

    PHP写的一个分页类

    本篇文章将详细讲解标题为"PHP写的一个分页类"的实现原理,以及如何利用这个分页类来优化网页的用户体验。 首先,让我们了解分页的基本概念。分页是将数据库查询结果分成若干部分,每次只加载一部分到网页上,通过...

    用JQuery做的一个分页效果

    标题中的“用JQuery做的一个分页效果”指的是使用JavaScript库JQuery实现的网页分页功能。在网页中,特别是数据量较大的时候,为了提高用户体验和加载速度,通常会采用分页显示数据,而不是一次性加载所有内容。...

    自己写的一个分页控件,可以实现dataGridView的分页显示

    在描述中提到的“自己写的一个分页控件,可以实现dataGridView的分页显示”,这通常指的是为Windows Forms或WPF应用程序创建一个自定义的分页组件,用于处理大量数据在dataGridView中的展示。 dataGridView是.NET...

    一个分页例子

    这个分页示例展示了如何将JSP、JavaScript、AJAX和数据库技术结合,实现一个功能完备、用户体验良好的分页系统。通过学习这个例子,开发者可以更好地理解这些技术在实际项目中的应用,为自己的网页开发打下坚实的...

    很好用性能高的一个分页查询

    很实用值得借鉴的一个分页例子,性能高,只需要传你要的参数就可以实用了

    ASP的一个分页类,使用方法在代码注释里!

    ASP的一个分页类,使用方法在代码注释里!简单的分页class

    MS Sql的一个分页存储过程 - wsmall的专栏 - CSDNBlog.mht

    MS Sql的一个分页存储过程 - wsmall的专栏 一个分页储存的过程

    C# winform的一个分页控件

    winform 的一个前台 分页控件,项目用了devExpress控件组。 你也可以不用,用普通的按钮,输入框代替,后台代码都是基本一样。 用法,工具箱,选择项,浏览,选 xpager.dll就有了。 有个 OnPageChanged 事件,里面写...

    ext-gwt分页 鉴于网上关于ext-gwt的技术文章很少代码页很少本着开源的精神本人特地写了一个分页的组件供大家学习欢迎下载

    1. **创建Store**:定义一个Store,并配置分页参数,如`paging : true`,`pageSize : 25`,表示每页显示25条记录。 2. **配置Proxy**:设置Store的Proxy,指定数据源并处理分页请求,如使用`new JsonPProxy('data....

Global site tag (gtag.js) - Google Analytics