分頁的第二種方式
阿新 • • 發佈:2019-01-31
優點:
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);