Jsp_Servlet小demo中的分页实现

在实际项目中,所需要展示的数据会有很多,分页是很有必要的。

那么分页的实现

1.首先定义一个工具类Page,在工具类中,定义系列属性

package com.stu_clss.utils;

import java.util.List;

/**
 * 
 * @author ljf
 *分页工具类  加入泛型
 */
public class Page<T> {

	/*
	 *        封装属性
	 * 总记录数
	 * 总页数
	 * 当前页数
	 * 每页显示的条数
	 * 每页显示的数据集合
	 */
	private int totalcount;    //总记录数
	private int totalpage;    //总页码
	private int currentpage;  //当前页码
	private int rows;          //每页显示的记录数
	private List<T> list;     //每页数据
	
	
	public int getTotalcount() {
		return totalcount;
	}
	public void setTotalcount(int totalcount) {
		this.totalcount = totalcount;
	}
	public int getTotalpage() {
		return totalpage;
	}
	public void setTotalpage(int totalpage) {
		this.totalpage = totalpage;
	}
	public int getCurrentpage() {
		return currentpage;
	}
	public void setCurrentpage(int currentpage) {
		this.currentpage = currentpage;
	}
	public int getRows() {
		return rows;
	}
	public void setRows(int rows) {
		this.rows = rows;
	}
	public List<T> getList() {
		return list;
	}
	public void setList(List<T> list) {
		this.list = list;
	}
	
	
	
		
	
	
}

在工具类baseDao中定义查询数据库中总数量的方法

//查询数量
	public int getobj(String sql, Class<T> Class,Object... params){
		//创建queryrunner对象  导入连接池
		QueryRunner qr = new QueryRunner(cmp);
		  //定义int变量 接收数据
		int r = -1;
		//执行sql
		try {
			r = ((Long) qr.query(sql, new ScalarHandler(),params)).intValue();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return r;
		
	}

那么在对应的dao层接口定义三个方法

//查询总记录数
public int totalcounts(String ssname,String clid);
//计算每页记录
public List<Stu> pagecounts(int start, int rows_);
//分页
public List<Stu> getpage(String ssname,String clid,int start,int rows_);

在其实现类中编写语句,如何拼接sql是一个问题,

逐步实现方法,首先记录总数只需要实现类继承我们的baseDao即可,但在项目中我们还涉及到了模糊查询,也就意味着记录总数是要发生变化的,也就是需要我们灵活的拼接sql,我们在页面上设计了允许两个模糊查询条件snamecid,并且无论用户输入哪种条件或者不输入条件,都应该有对应的语句执行。多种考虑后,我们选用集合来接收这两个字段。

@Override
	public int totalcounts(String ssname,String clid) {
		//编写sql
		String sql = "select count(*) from stu where 1 = 1";
		//定义集合接收
				List<Object> glist = new ArrayList<Object>();
				if(ssname != null && !ssname.equals("")){
					sql = sql +" and sname like ?";
					glist.add("%"+ssname+"%");
				}
				if(!clid.equals("-1") && !clid.equals("")){
					sql = sql + " and cid = ?";
					glist.add(clid);
				}
		//调用getobj方法查询数量
		int rows =  getobj(sql, Stu.class,glist.toArray());
		return rows;
	}

其次编写分页方法,将以上考虑编写到此方法中,并将得到的集合存储到Page中定义的list中


public Page<Stu> getpage(String ssname,String clid,int start,int rows_){
	//编写sql
		String sql = "select * from stu where 1 = 1";
		//定义数组接收
		List<Object> glist = new ArrayList<Object>();
		if(ssname != null && !ssname.equals("")){
			sql = sql +" and sname like ?";
			glist.add("%"+ssname+"%");
		}
		if(!clid.equals("-1") && !clid.equals("")){
			sql = sql + " and cid = ?";
			glist.add(clid);
		}
		sql = sql + " order by cid limit ?,?";
		glist.add(start);
		glist.add(rows_);
		//调用getall方法
		List<Stu> sli = getall(sql,Stu.class,glist.toArray());
		Page<Stu> page = new Page<Stu>();
		page.setList(sli);
		return page;
	}

在service层实现类编写分页方法

public Page<Stu> getpage(String sname,String clid,String currentpage,String rows){
		//创建page对象
				Page<Stu> page = new Page<Stu>();
				//设置参数
				int currentpage_ = Integer.parseInt(currentpage);
				int rows_ = Integer.parseInt(rows);
				page.setCurrentpage(currentpage_);
				page.setRows(rows_);
				//调用dao层查总记录数
				int totalcount = sd.totalcounts(sname,clid);
				System.out.println(totalcount+"totalcount");
				page.setTotalcount(totalcount);
				//调用查寻list集合方法
				//查看开始记录的索引
				int start = (currentpage_ - 1) * rows_;
				List<Stu> list = sd.getpage(sname,clid,start,rows_);
				//设置集合
				page.setList(list);
				//计算总页码
				   int totalpage =  (totalcount % rows_) == 0 ? totalcount / rows_ : (totalcount / rows_) + 1;
				//设置参数
				   page.setTotalpage(totalpage); 
				   
				   for(Stu s:list){
						//取出Stu所有信息的cid
						int cid = s.getCid();
						//创建Clss_dao对象
						Clss_dao cd = new Clss_dao_impl();
						//通过cid获取对应的Clss信息
						Clss clss = cd.selectone(cid);
						//将获取到的信息保存到Stu对象中
						s.setClss(clss);
				   }
		return page;
	}

在对应的servlet中

//分页查询方法
	public void pagecounts(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
              //修改字符集
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		//获取页面传入的当前页数 页面条数
		String currentpage = request.getParameter("currentpage");
		if(currentpage == null){
			currentpage = "1";
		}
		String rows = request.getParameter("rows");
		rows="1";
		//创建Stu_service对象
		Stu_service sse = new Stu_service_impl();
		//创建page对象接收数据
		Page<Stu> page = new Page<Stu>();
		//调用pagecounts方法
		System.out.println(currentpage+rows+"pagecount");
	   page = sse.pagecounts(currentpage, rows);
		System.out.println(page+"page");
		//存入作用域中
		request.setAttribute("stulist", page);
		//转发
		request.getRequestDispatcher("../../stuclss/Stuselectall.jsp").forward(request, response);
		
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值