常用公共代码二之分页代码的实现

在项目中,我们经常会写到一些公共的代码,来让开发人员调用,减少代码重复,下面,我就将一些常用到的公共类贴出来和大家分享!!

二、分页代码实现:在项目中,分页是一个项目中必不可少的,它可以防止我们从数据库中进行大量数据查询时速度变慢,提高我们的查询效率

1、定义分页模型:PageModel

package com.common.page;

import java.util.List;

/**
 * 封装分页信息
 * @author Administrator
 *
 */
public class PageModel<E> {

	//结果集
	private List<E> list;
	
	//查询记录数
	private int totalRecords;
	
	//每页多少条数据
	private int pageSize;
	
	//第几页
	private int pageNo;
	
	/**
	 * 总页数
	 * @return
	 */
	public int getTotalPages() {
		return (totalRecords + pageSize - 1) / pageSize;
	}
	
	/**
	 * 取得首页
	 * @return
	 */
	public int getTopPageNo() {
		return 1;
	}
	
	/**
	 * 上一页
	 * @return
	 */
	public int getPreviousPageNo() {
		if (pageNo <= 1) {
			return 1;
		}
		return pageNo - 1;
	}
	
	/**
	 * 下一页
	 * @return
	 */
	public int getNextPageNo() {
		if (pageNo >= getBottomPageNo()) {
			return getBottomPageNo();
		}
		return pageNo + 1;	
	}
	
	/**
	 * 取得尾页
	 * @return
	 */
	public int getBottomPageNo() {
		return getTotalPages();
	}
	
	public List<E> getList() {
		return list;
	}

	public void setList(List<E> list) {
		this.list = list;
	}

	public int getTotalRecords() {
		return totalRecords;
	}

	public void setTotalRecords(int totalRecords) {
		this.totalRecords = totalRecords;
	}

	public int getPageSize() {
		return pageSize;
	}

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

	public int getPageNo() {
		return pageNo;
	}

	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}
}
2、分页测试:在MySQL中建立admin表,里面有字段id、name、password

3、简历Admin的实体bean类:

package com.common.page;

public class Admin {
	private int id;
	private String name;
	private String password;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}

}

4、测试调用:

package com.common.page;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.common.db.DbUtil;

public class Client {
	public static PageModel findAdmins(int pageNo,int pageSize){
		Connection conn=DbUtil.getConnection();
		String sql="select * from admin limit ?,?";
		PageModel pageModel=null;
		PreparedStatement pstm=null;
		ResultSet rs=null;
		Admin admin=null;
		List<Admin> list=new ArrayList<Admin>();
		try {
			pstm=conn.prepareStatement(sql);
			pstm.setInt(1, (pageNo-1)*pageSize);
			pstm.setInt(2, pageNo*pageSize);
			rs=pstm.executeQuery();;
			while(rs.next()){
				admin=new Admin();
				admin.setId(rs.getInt("a_id"));
				admin.setName(rs.getString("a_name"));
				admin.setPassword(rs.getString("a_pwd"));
				list.add(admin);
			}
			ResultSet rs2=pstm.executeQuery("select count(*) from admin");
			int total=0;
			if(rs2.next()){
				total=rs2.getInt(1);
			}
			pageModel=new PageModel();
			pageModel.setPageNo(pageNo);
			pageModel.setPageSize(pageSize);
			pageModel.setTotalRecords(total);
			pageModel.setList(list);
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DbUtil.close(conn);
			DbUtil.close(pstm);
			DbUtil.close(rs);
		}
		return pageModel;
	}
	
	public static void main(String[] args) {
		PageModel pageModel=Client.findAdmins(2,4);
		List<Admin> list=pageModel.getList();
		for(Admin a:list){
			System.out.print("ID:"+a.getId()+",用户名:"+a.getName()+",密码:"+a.getPassword());
			System.out.println();
		}
		System.out.print("当前页:"+pageModel.getPageNo()+" ");
		System.out.print("共"+pageModel.getTotalPages()+"页  ");
		System.out.print("首页:"+pageModel.getTopPageNo()+" ");
		System.out.print("上一页:"+pageModel.getPreviousPageNo()+" ");
		System.out.print("下一页:"+pageModel.getNextPageNo()+" ");
		System.out.print("尾页:"+pageModel.getBottomPageNo()+" ");
		System.out.print("共"+pageModel.getTotalRecords()+"条记录");
		System.out.println();
	}

}

这样分页效果就实现了,我们要实现分页效果,只要传入相应的参数和相应的数据库执行语句即可实现,希望大家能灵活运用。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值