`
sing100star
  • 浏览: 29009 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于分页的那一点事情

阅读更多

前段时间在学习ssh2框架中,研究有关分页的问题,现把自己的心得分享一下。

其思路是:把不变的部分与变化的部分相分开。采用的方法是运用策略模式。具体代码如下

 

package service;

import java.util.List;
public class PageBean implements java.io.Serializable {
	
	private int currentPage;
	private int totalPages;
	private int pageRows=5;
	private int totalRows;
	private boolean hasPreviousPage;
	private boolean hasNextPage;
	private PageCountable pageCounter;// 策略模式的运用,引入分页计算器
	
	public void setPageCounter(PageCountable counter)
	{
		pageCounter = counter;
	}
	public PageCountable getPageCounter()
	{
		return pageCounter;
	}
	
	public int getCurrentPage()
	{
		return currentPage;
	}

	public int getTotalPages()
	{
		return totalPages;
	}

	public int getPageRows()
	{
		return pageRows;
	}
	public void setPageRows(int pageRows)
	{
		 this.pageRows=pageRows;
	}

	public int getTotalRows()
	{
		return totalRows;
	}


	public boolean isHasPreviousPage()
	{
		return hasPreviousPage;
	}

	public boolean isHasNextPage()
	{
		return hasNextPage;
	}

	
	public void initPageBean()//初始化分页bean
	{
		this.pageRows = pageRows;
		this.totalRows = pageCounter.getTotalRows();//分页计算器中的方法,用于计算总行数
		this.currentPage = 1;
		
		if((totalRows % pageRows)==0)
		{
			totalPages = totalRows / pageRows;
			if(this.totalPages == 0) this.totalPages = 1;
		}
		else
		{
			totalPages = totalRows / pageRows + 1;
		}
		
		this.hasPreviousPage = false;
		
		if(currentPage == totalPages) hasNextPage = false;
		else hasNextPage = true;			
	
	}
	
	public List getAppointPageList(int current)//取得制定页数的内容,页码从1开始
	{
		this.currentPage = current;
		
		if(currentPage > this.totalPages) this.currentPage = this.totalPages;
		
		if(currentPage < 1) this.currentPage = 1;
		
		if(this.currentPage > 1) this.hasPreviousPage = true;
		else this.hasPreviousPage = false;
		
		if(this.currentPage < this.totalPages) this.hasNextPage = true;
		else this.hasNextPage = false;
			
		return pageCounter.findList(current,pageRows);//分页计算器中的方法,用于获取指定页码的记录
	}
}
 
package service;
import java.util.List;
public interface PageCountable {
	
	int getTotalRows();//获取总行数
	List findList(int PageNo,int PageSize);//返回制定页面的列表

}
 
package service;
import domain.*;
import dao.*;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ProductCounter implements PageCountable {
	
	String queryString;// hql语句
	String[] values;//查询内容

	 private GenericDao<ProductInfo,Integer> dao;//由spring注入的dao
     
     public GenericDao getDao() {  
         return dao;  
     }  
   
     public void setDao(GenericDao dao) {  
        this.dao =dao;  
     }  


 	public String getQueryString() {
 		return queryString;
 	}

 	public void setQueryString(String queryString) {
 		this.queryString = queryString;
 	}

 	public String[] getValues() {
 		return values;
 	}

 	public void setValues(String[] values) {
 		this.values = values;
 	}
 	

	public List findList(int PageNo, int PageSize) {

		int start=(PageNo-1)*PageSize;//计算第一条记录的位置
		int limit =PageSize;//最大记录数
		return dao.find(queryString, values, start, limit);

	}

	public int getTotalRows() {
			return dao.find(queryString, values).size();
		
	}


}

 其中PageCountable是接口类,ProductCounter是它的实现类,一旦我们想进行阿不不了新的查询,比如原料,文章,只要实现了PageCountable类,就可以了,不用在编写其他复杂的代码.

如有新的建议或想法,请与我留言哈

2
3
分享到:
评论

相关推荐

    Compare-Paging-Algorithms:模拟不同的分页算法(计算机中处理虚拟内存“页面”的方法),包括 FIFO、LRU、MFU 和 LFU

    这是关于内核(“操作系统”,COMS221)的大学课程的最终项目,目的是提高分页算法的效率。 在看到其他组成员的尝试后,我决定最灵活和最强大的解决方案(并且通过扩展,最好的,因为速度在这里无关紧要)实现这...

    毕业设计:ASP家教信息管理系统(源代码)

    从小学到高中,很多学生家长抱着望子成龙的心态都不遗余力为孩子找合适的家教,而很多在校的大学生也通过当家教增加一点收入,所以开发一个家教信息管理系统,满足双方的需要很有必要的事情. 系统的功能是为有家教老师...

    开源bbs源码java-mcplugin-website-history:一个记录mcplugin网站历史改动的仓库

    开源 bbs 源码 java 这个项目是干什么的 ... 我们也欢迎有人来帮忙记录,你...哦对了,这文章太长了,我不想一口气写完,那就连载吧,有兴趣的可以经常来看一看,我会尽量更新得快一点。我可能还会添加分页插件,不然文章

    前1个Google图书

    我试图在检索数据时考虑到这一点,但是在我的许多测试搜索中,我能够返回的最终结果数比Google最初报告的totalItems值低很多。 我不确定这是否是预期的行为,或者我是否错过了重要的事情。 为了加快分页的服务器...

    2023年Android面试整里大全.doc

    * Activity:Android 程序与用户交互的窗口,负责保持各界面的状态,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑 * Service:后台服务于 Activity,封装有一个完整的功能逻辑实现,接受上层指令,完毕...

    Android 40 道面试题及答案.docx

    其中,Activity 是 Android 程序与用户交互的窗口,负责保持各界面的状态,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑;Service 是后台服务于 Activity,封装有一个完整的功能逻辑实现,接受上层指令,...

    自己动手写操作系统(含源代码).part2

    我想,虽然第二版有着这样那样的变化,但有一点没有变,那就是本书试图将我在编写自己操作系统的过程中的经验尽可能地告诉读者,同时尽可能将我当初的思路和编码过程呈现出来。很可能读者比我更聪明,有更好的解决...

    自己动手写操作系统(含源代码).part1

    我想,虽然第二版有着这样那样的变化,但有一点没有变,那就是本书试图将我在编写自己操作系统的过程中的经验尽可能地告诉读者,同时尽可能将我当初的思路和编码过程呈现出来。很可能读者比我更聪明,有更好的解决...

    springmybatis

    mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in action之八mybatis 动态sql语句 mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis ...

    非官方的NewsBlur读者「Unofficial NewsBlur Reader」-crx插件

    当您导航到网页或打开包含可用RSS / ATOM / RDF提要的选项卡时,该图标将显示一个+表示这一点。已知问题:-有时面板可能需要花费几秒钟来加载。我已经做了很多事情来加快加载速度。如果您在此方面以及与Feed有关的...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    Blog记载了日常发生的事情和自己的兴趣爱好,把自己的思想和知识和他人分享、交流,同时又通过“六度空间”结识了更多志趣相投的朋友;而越来越多专业知识的 Blog 的出现,让我们看到了 Blog 更多所蕴涵的巨大的...

Global site tag (gtag.js) - Google Analytics