分页主要需要三个参数:1.某个对象的总数 2.每页展示的数量 3.能分为几页
1.获取总数:
select count(c.categoryId) from Category c
public long getUserCount() {
List us = listHql("select count(u.userId) from UserInfo u ");
if(us == null){
return 0;
}
return (Long) us.get(0);
}
2.设置每页展示几条数据
int pageSize = 10
3.可以被分为几页
public int getPageCount(int count, int pageSize) {
return (count + pageSize -1) / pageSize;
}
public List<UserInfo> findAllByPage(int pageNo,int pageSize);
UserDaoImpl.java
public List<UserInfo> findAllByPage(int pageNo, int pageSize) {
if(pageNo < 1){
return null;
}
int offset = (pageNo - 1) * pageSize;
return findByPage("from UserInfo", offset,pageSize);
}
public class MyHibernateDaoSupport extends HibernateDaoSupport{
@Autowired
public void setMySessionFactory(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}
public List findByPage(final String hql, final int offset,final int pageSize){
Session session = getSessionFactory().getCurrentSession();
List result = session.createQuery(hql).setFirstResult(offset).setMaxResults(pageSize).list();
return result;
}
}
UserService.java
public List<UserInfo> userList(int pageNo);
public List<UserInfo> userList(int pageNo) {
return userDao.findAllByPage(pageNo, User_page_size);
}
4.根据页码获取该页码中的所有数据条数
①可以在Service中定义public List<Category> categoryList(int pageNo); 然后去调用Dao中实现的public List<Category> findAllByPage(int pageNo,int pageSize);
public List<Category> findAllByPage(int pageNo, int pageSize) {
if(pageNo < 1){
return null;
}
int offset = (pageNo - 1) * pageSize;
return findByPage("from Category", offset,pageSize); -------->去调用BaseDao中的方法,即HIbernate中的方法
}
②public List findByPage(final String hql, final int offset,final int pageSize){
Session session = getSessionFactory().getCurrentSession();
List result = session.createQuery(hql).setFirstResult(offset).setMaxResults(pageSize).list();
return result;
}
可想而知,在struts2的action中要获取 1.总数 2.获取可以分为几页 3 判断pageNo -------------->
private int pageNo;
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public String getAllCategory(){
int count = categoryService.getCategoryCount();
int pageCount = categoryService.getPageCount(count, categoryService.Category_page_size);
if(pageNo == 0){
pageNo = 1;
}
if(pageNo > pageCount){
pageNo = pageCount;
}
System.out.println("count="+count);
System.out.println("==pageCount=="+pageCount);
System.out.println("==pageNo=="+pageNo);
//List<Category> caList = categoryService.getAllCategory();
List<Category> caList = categoryService.categoryList(pageNo);
session.put("caList", caList);
session.put("count", count);
session.put("pageCount", pageCount);
session.put("pageNo", pageNo);
return "success";
}
jsp
<td colspan="8" class="pagin">
<div class="pagelist"> 共<span class="">${sessionScope.count }</span>条记录,
当前显示第 <span class="current">${sessionScope.pageNo } </span>页,
共 <span class="">${sessionScope.pageCount } </span>页
</div>
<ul class="paginList">
<li class="paginItem"><a href="${pageContext.request.contextPath}/category/getAllCategory?pageNo=${requestScope.pageNo-1 }"></a></li>
<c:forEach var="s" begin="1" end="${sessionScope.pageCount}">
<li><a href="${pageContext.request.contextPath}/category/getAllCategory?pageNo=${s }">${s}</a></li>
</c:forEach>
<li class="paginItem"><a href="${pageContext.request.contextPath}/category/getAllCategory?pageNo=${requestScope.pageNo+1 }"><span class="pagenxt"></span></a></li>
</ul>
</td>