1. 程式人生 > >32、分頁實現——分頁的dao實現

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()+" 頁");
		
	}