1、需求
对于多条数据对单个页面难以显示,所以分页处理很有必要,现有用户角色系统(ssm框架—多对多curd),需要对用户数据进行分页处理
2、代码实现
实体类PageBean
package com.itcast.domain;
import java.util.List;
public class PageBean<T> {
private int currPage;//当前页数
private int pageSize;//每页显示的记录数
private int totalCount;//总记录数
private int totalPage;//总页数
private List<T> lists;//每页的显示的数据
public PageBean() {
super();
}
public int getCurrPage() {
return currPage;
}
public void setCurrPage(int currPage) {
this.currPage = currPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public List<T> getLists() {
return lists;
}
public void setLists(List<T> lists) {
this.lists = lists;
}
}
DAO层
// 查询用户记录总数
public int selectCount();
//分页操作,调用findByPage limit分页方法
public List<User> findByPage(HashMap<String,Object> map);
UserMapper.xml
<!-- 根据分页数据start 和size查询数据 -->
<select id="findByPage" parameterType="Map" resultMap="userMap">
SELECT u.id,u.username,u.password,u.sex,GROUP_CONCAT(r.id) roleid, GROUP_CONCAT(r.rolename) role
from l_user u LEFT JOIN user_role ur ON u.id=ur.userid
LEFT JOIN role r ON r.id=ur.roleid
GROUP BY u.id
<if test="start!=null and size!=null">
limit #{start},#{size}
</if>
</select>
Service层
//分页处理
int selectCount();
PageBean<User> findByPage(int currentPage);
Service层接口
public int selectCount() {
return userDao.selectCount();
}
public PageBean<User> findByPage(int currentPage) {
HashMap<String,Object> map = new HashMap<String,Object>();
PageBean<User> pageBean = new PageBean<User>();
//封装当前页数
pageBean.setCurrPage(currentPage);
//每页显示的数据
int pageSize=3;
pageBean.setPageSize(pageSize);
//封装总记录数
int totalCount = userDao.selectCount();
pageBean.setTotalCount(totalCount);
//封装总页数
double tc = totalCount;
Double num =Math.ceil(tc/pageSize);//向上取整
pageBean.setTotalPage(num.intValue());
map.put("start",(currentPage-1)*pageSize);
map.put("size", pageBean.getPageSize());
//封装每页显示的数据
List<User> lists = userDao.findByPage(map);
pageBean.setLists(lists);
return pageBean;
}
Web控制层
//分页处理
@RequestMapping("main")
public ModelAndView getPage(@RequestParam(defaultValue="1")int currentPage,Model model){
ModelAndView mav = new ModelAndView();
model.addAttribute("pagemsg",userService.findByPage(currentPage) );//回显分页数据
mav.setViewName("user");
return mav;
}
jsp页面
<table id="page_table" >
<tr>
<td class="td2">
<span>第${requestScope.pagemsg.currPage}/ ${requestScope.pagemsg.totalPage}页</span>
<span>总记录数:${requestScope.pagemsg.totalCount } 每页显示:
${requestScope.pagemsg.pageSize}</span>
<span>
<c:if test="${requestScope.pagemsg.currPage != 1}">
<a href="${pageContext.request.contextPath }/main?currentPage=1">[首页]</a>
<a href="${pageContext.request.contextPath }/main?currentPage
=${requestScope.pagemsg.currPage-1}">[上一页]</a>
</c:if>
<c:if test="${requestScope.pagemsg.currPage != requestScope.pagemsg.totalPage}">
<a href="${pageContext.request.contextPath }/main?currentPage
=${requestScope.pagemsg.currPage+1}">[下一页]</a>
<a href="${pageContext.request.contextPath }/main?currentPage
=${requestScope.pagemsg.totalPage}">[尾页]</a>
</c:if>
</span>
</td>
</tr>
</table>
效果图: