32、分页实现——分页的dao实现

学习目标:

1、掌握Java端的分页算法

2、根据业务灵活的使用分页算法

学习过程:

有了数据库分页的基础后,java代码实现分页就只是调用这个sql语句就可以了,但是为了更好的支持分页的算法,我们需要在dao层把分页的算法封装一下,这样模型层调用和页面展示的时候才能更加方便。

一、封装一个分页对象

新建一个Page类,把分页的算法封装到这个类里面。

public class Page {
	
	private int currentPage;
	private int startItem;//起始位
	private int endItem;//起始位
	private int pageSize;//每页显示的数量
	
	private int pageCount;//总页数
	private int itemCount;//总条数
	
	
	public Page(){
		this.currentPage=1;
		this.pageSize=10;
		
	}
	
	public int getCurrentPage() {
		return currentPage;
	}
	public void setCurrentPage(int currentPage) {
		if(currentPage<1){
			currentPage=1;
		}
		
		this.currentPage = currentPage;
	}
	
	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	
	public int getItemCount() {
		return itemCount;
	}
	public void setItemCount(int itemCount) {
		this.itemCount = itemCount;
	}
	
	public int getStartItem() {
		return (currentPage-1)*pageSize;
	}
	public int getEndItem() {
		return getStartItem()+pageSize;
	}
	public int getPageCount() {
		
		return itemCount%pageSize==0?itemCount/pageSize:(itemCount/pageSize+1);
		
		//100/10=10
		//99/10=9....1
		/*if(itemCount%pageSize==0){
		   return 	itemCount/pageSize;
		}else{
			return	itemCount/pageSize+1;
		}*/

	}
	
}

二、dao层的分页查询

这里我们除了要查询出数据之外,我们还需要获得一些分页的信息,比如总页数和总条数等等,所有在查询的时候我们还需要查询出总条数出来,这里也是使用数据库统计函数统计出来,由于mysql和oracle的sql代码和需要传递的参数是不同的,所以需要根据你当前连接数据库决定你如何写这个代码,下面先先看看mysql的具体代码:我们现在这里写一个main方法测试一下是否能成功,代码如下:

	public List<User> getUserForPage(Page page){

		List<User> users = new ArrayList<User>();


		try {
			getCon();
			
			//计算总条数
			String sqlcount="select count(*) from tb_user";
			preExe(sqlcount);
			ResultSet rscount=ps.executeQuery();
			if(rscount.next()){
				page.setItemCount(rscount.getInt(1));
			}
			rscount.close();
			
			
			//mysql
			String sql = "select * from tb_user limit ?,?";
			
			//oracle
			//String sql=" select * from  (select  t.*,rownum rn from  (select * from tb_user   order by user_id) t where rownum<=?) where rn>?";
			
			preExe(sql,page.getStartItem(),page.getPageSize());
			rs = ps.executeQuery();

			while (rs.next()) {
				User user = new User();
				user.setUsername(rs.getString("username"));
				user.setSex(rs.getInt("sex"));
				user.setUserId(rs.getInt("user_id"));
				users.add(user);
			}

		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			closeAll();
		}

		return users;

	}
	
	
	public static void main(String[] args) {
		UserDao userDao = new UserDao();
		
		Page page=new Page();
		page.setCurrentPage(1);
		List<User> users=userDao.getUserForPage(page);
		
		for(User user:users){
			System.out.println(user.getUserId()+":"+user.getUsername());
		}
		
		System.out.println("共有 "+page.getItemCount()+" 条数据,每页显示"+page.getPageSize()+"条  当前是第 "+page.getCurrentPage()+" 页  ,共有 "+page.getPageCount()+" 页");
		
	}

猜你喜欢

转载自blog.csdn.net/liubao616311/article/details/84072070