32、分頁實現——分頁的dao實現
阿新 • • 發佈:2018-12-03
學習目標:
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()+" 頁"); }