1. 程式人生 > >分頁的第二種方式

分頁的第二種方式

優點: 1.程式碼十分簡潔 缺點: 1.不能及時響應資料庫中變化 2.重複查詢較多,每獲取一個屬性(總頁數),都要查詢資料庫 將某一頁的資料直接封裝在此類中,調一個方法便可獲取資料。 public class fengye { // 查詢所有使用者 public List<User> selecthouse() { // TODO Auto-generated method stub Session session = HibernateUtil.getSession(); // 開啟事物 Transaction tran = session.beginTransaction(); String hql = "from User"; Query q = session.createQuery(hql); List<User> list = q.list(); HibernateUtil.closeSession(); return list; } // 計算頁數 public int getTotalPages(int count, int pageSize) { int totalpages = 0; totalpages = (count % pageSize == 0) ? (count / pageSize) : (count / pageSize + 1); return totalpages; } // 獲取使用者數 public int getConut() { Session session = HibernateUtil.getSession(); Transaction tran = session.beginTransaction(); String hql = "select count(*) from User"; Query q = session.createQuery(hql); List list = q.list(); String li = list.get(0).toString(); Integer count = Integer.parseInt(li); HibernateUtil.closeSession(); return count; } // 獲取當前頁的記錄 public List<User> selechouse(int pageIndex, int pageSize) { Session session = HibernateUtil.getSession(); // 開啟事物 Transaction tran = session.beginTransaction(); String hql = "from User"; Query query = session.createQuery(hql); query.setFirstResult((pageIndex - 1) * pageSize); query.setMaxResults(pageSize); List<User> result = query.list(); HibernateUtil.closeSession(); return result; } } JSP頁面: <% //設定每頁顯示條數 int pageSize = 3; //例項化 fengye newxw = new fengye(); //獲取表中有多少條資料 int count = newxw.getConut(); //獲取頁碼 String page1 = request.getParameter("pageIndex"); //得到分頁數目 int pag = newxw.getTotalPages(count, pageSize); //得到當前頁碼 int pageIndex = 0; //判斷得到的值是否有值 if (page1 == null) { pageIndex = 1; } else { //把當前頁賦值給pageIndex pageIndex = Integer.parseInt(page1); //判斷當前頁是否為最大頁 if (pageIndex > pag) { pageIndex = pag; } } List<User> list = newxw.selechouse(pageIndex, pageSize); request.setAttribute("list", list); %> <table id="cs_table" class="datatable"> <thead> <tr> <th>名稱</th> <th>性別</th> <th>地址</th> </tr> </thead> <tbody> <c:forEach items="${requestScope.list}" var="mind" varStatus="id"> <tr> <td>${mind.username}</td> <td>${mind.sex}</td> <td>${mind.address}</td> </tr> </c:forEach> </tbody> </table> <div id="fy"> <% //判斷當前頁是否為末頁 if (pageIndex > 1) { %> <a href="page1.jsp?pageIndex=<%=1%>"> 首頁</a> <a href="index.jsp?pageIndex=<%=pageIndex - 1%>"> 上一頁 </a> <% } //判斷當前頁是否為首頁 if (pageIndex < pag) { %> <a href="page1.jsp?pageIndex=<%=pageIndex + 1%>"> 下一頁</a> <a href="page1.jsp?pageIndex=<%=pag%>"> 末頁 </a> <% } %> [<%=pageIndex%>/<%=pag%>]頁 </div> 改進版:效能更優化,程式碼更簡潔。 為頁面資料新建一個類 public class PageData { private int count; private int pageIndex; private int totalPages; private List<User> list; }省略get/set 此類減少到一個核心方法,將資料放入PageData物件中。 public class fengye { private PageData data; public fengye(){ data=new PageData(); } public PageData getData(int pageIndex,int pageSize){ Session session = HibernateUtil.getSession(); // 開啟事物 Transaction tran = session.beginTransaction(); String hql = "from User"; Query q = session.createQuery(hql); List<User> list = q.list(); Integer count = list.size(); int totalpages = 0; totalpages = (count % pageSize == 0) ? (count / pageSize) : (count / pageSize + 1); data.setTotalPages(totalpages); if(pageIndex>totalpages){ pageIndex=totalpages; } q.setFirstResult((pageIndex - 1) * pageSize); q.setMaxResults(pageSize); list = q.list(); data.setList(list); data.setPageIndex(pageIndex); data.setCount(count); HibernateUtil.closeSession(); return data; } } JSP //設定每頁顯示條數 int pageSize = 3; //例項化 fengye newxw = new fengye(); //得到當前頁碼 int pageIndex = 0; //獲取頁碼 String page1 = request.getParameter("pageIndex"); //判斷傳來的引數是否有值 if (page1 == null) { pageIndex = 1; } else { //把當前頁賦值給pageIndex pageIndex = Integer.parseInt(page1); //判斷當前頁是否為最大頁 } //獲取表中有多少條資料 int count ; //得到分頁數目 int pag; PageData data=newxw.getData(pageIndex, pageSize); count=data.getCount(); page1=""+data.getPageIndex(); pag=data.getTotalPages(); List<User> list = data.getList(); request.setAttribute("list", list);