SSM框架下分页功能的实现(封装pageBean)

SSM中分页的实现(封装pageBean)

方式一:

1.实体类
public class Page implements Serializable {
   private static final long serialVersionUID = -3198048449643774660L;

    private int pageNow = 1; // 当前页数

    private int pageSize = 10; // 每页显示记录的条数

    private int totalCount; // 总的记录条数

    private int totalPageCount; // 总的页数

    @SuppressWarnings("unused")
    private int startPos; // 开始位置,从0开始


    /**
     * 通过构造函数 传入  总记录数  和  当前页
     * @param totalCount
     * @param pageNow
     */
    public Page(int totalCount, int pageNow) {
        this.totalCount = totalCount;
        this.pageNow = pageNow;
    }

    /**
     * 取得总页数,总页数=总记录数/每页显示记录的条数
     * @return
     */
    public int getTotalPageCount() {
        totalPageCount = getTotalCount() / getPageSize();
        return (totalCount % pageSize == 0) ? totalPageCount  //总页数
                : totalPageCount + 1;
    }

    public void setTotalPageCount(int totalPageCount) {
        this.totalPageCount = totalPageCount;
    }

    public int getPageNow() {
        return pageNow;
    }

    public void setPageNow(int pageNow) {
        this.pageNow = pageNow;
    }

    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;
    }
    /**
     * 取得选择记录的初始位置
     * @return
     */
    public int getStartPos() {
        return (pageNow - 1) * pageSize;
    }

    public void setStartPos(int startPos) {
        this.startPos = startPos;
    }

}

2.Mapper.xml配置
<!-- 根据分页数据start 和size查询数据 -->
  <resultMap type="com.xbj.po.User" id="userMap" autoMapping="true">
    <id property="id" column="id" />
  </resultMap>
  <!-- 分页SQL语句 -->
  <select id="selectUserByPage" resultMap="userMap">
        select *
        from users limit #{startPos},#{pageSize}
    </select>
  <!-- 查询用户记录总数 -->
  <select id="Count" resultType="java.lang.Long">
    select count(*) from users
  </select>
3.mapper接口
/*
     * 查询用户记录总数
     * */
    Long Count();
    /*
     * 分页操作,调用findByPage limit分页方法
     * */
    public List<User> selectUserByPage(@Param(value="startPos") Integer startPos,
                                       @Param(value="pageSize") Integer pageSize);
4.service接口
 void showUserByPage(HttpServletRequest request, Model model);
 
 Long Count();
5.ServiceImpl实现类
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    /*
    *  分页
    * */
    public void showUserByPage(HttpServletRequest request, Model model) {
        String pageNow = request.getParameter("pageNow");
        Page page = null;
        List<User> user =new ArrayList<User>();
        //查询用户总数
        int totalCount = userMapper.Count().intValue();//注:这里需要强转,long类型转换成int类型
        if (pageNow != null) {
            page = new Page(totalCount, Integer.parseInt(pageNow));
            user = this.userMapper.selectUserByPage(page.getStartPos(), page.getPageSize());
        } else {
            page = new Page(totalCount, 1);
            user = this.userMapper.selectUserByPage(page.getStartPos(), page.getPageSize());
        }
        model.addAttribute("user", user);
        model.addAttribute("page", page);
    }
    /*
    *   总记录数查询
    * */
    public Long Count() {
        return userMapper.Count();
    }

6.controller
@RequestMapping("/page")
    public String Page(HttpServletRequest request, Model model){
        userService.showUserByPage(request, model);
        return "user/index";
    }
7.jsp页面
    <div class="col-lg-10">
    <%--登录拦截器传输过来--%>
      欢迎你:${currentUser}
            <table class="table table-hover">
            <tr>
              <td>员工编号</td>
              <td>用户名</td>
              <td>密码</td>
              <td>性别</td>
              <%--<td>生日</td>--%>
              <td>电话</td>
              <td>部门</td>
              <%--<td>创建时间</td>--%>
              <td>管理员</td>
              <td>职位</td>
              <td>操作</td>

            </tr>
            <c:forEach items="${user}" var="user">
              <tr>

                <td>${user.id}</td>
                <td>${user.username}</td>
                <td>${user.password}</td>
                <td>${user.sex}</td>
                <%--<td>${user.birthday}</td>--%>
                <td>${user.tel}</td>
                <td>${user.department}</td>
                <%--<td>${user.createtime}</td>--%>
                <td>${user.isadmin}</td>
                <td>${user.content}</td>

               <td>

                  <form action="${pageContext.request.contextPath}/user/del?id=${user.id}" method="post" style="height: 10px;width: 50px">
                    <input type="hidden" name="_method" value="DELETE">
                    <button type="submit" onclick="return window.confirm('确定删除吗?');">删除</button>
                  </form><a  href="${pageContext.request.contextPath}/user/edit?id=${user.id}" style="margin-right: 10px;float: right;margin-top: -22px">修改</a>
                </td>

              </tr>

            </c:forEach>

          </table>

      <div align="center">
        <font size="2">共 ${page.totalPageCount} 页</font> <font size="2">第
        ${page.pageNow} 页</font> <a href="${pageContext.request.contextPath}/user/page?pageNow=1">首页</a>
        <c:choose>
          <c:when test="${page.pageNow - 1 > 0}">
            <a href="${pageContext.request.contextPath}/user/page?pageNow=${page.pageNow - 1}">上一页</a>
          </c:when>
          <c:when test="${page.pageNow - 1 <= 0}">
            <a href="${pageContext.request.contextPath}/user/page?pageNow=1">上一页</a>
          </c:when>
        </c:choose>
        <c:choose>
          <c:when test="${page.totalPageCount==0}">
            <a href="${pageContext.request.contextPath}/user/page?pageNow=${page.pageNow}">下一页</a>
          </c:when>
          <c:when test="${page.pageNow + 1 < page.totalPageCount}">
            <a href="${pageContext.request.contextPath}/user/page?pageNow=${page.pageNow + 1}">下一页</a>
          </c:when>
          <c:when test="${page.pageNow + 1 >= page.totalPageCount}">
            <a href="${pageContext.request.contextPath}/user/page?pageNow=${page.totalPageCount}">下一页</a>
          </c:when>
        </c:choose>
        <c:choose>
          <c:when test="${page.totalPageCount==0}">
            <a href="${pageContext.request.contextPath}/user/page?pageNow=${page.pageNow}">尾页</a>
          </c:when>
          <c:otherwise>
            <a href="${pageContext.request.contextPath}/user/page?pageNow=${page.totalPageCount}">尾页</a>
          </c:otherwise>
        </c:choose>
      </div>

    </div>
8.登录拦截器
/*
*     拦截器
* */
public class LoginInterceptor extends HandlerInterceptorAdapter {
    //进入handler之前(资源执行之前)
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        //身份验证,权限控制
        //如果已经登录,在session保存登录状态
        HttpSession session=request.getSession();
        Object user=session.getAttribute("u");
        if(StringUtils.isEmpty(user)){
            //如果未登陆 跳转到登陆界面
            request.getRequestDispatcher("/login").forward(request,response);
            return false;
        }else{
            return true;
        }
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        //公共数据封装  批处理  可以拿到 modelAndView
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        //异常的集中处理   日志的集中记录
    }
}

方式二:

1.pageBean
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;
	}
	
}

2.Mapper.xml配置
<!-- 根据分页数据start 和size查询数据 -->
	<select id="findByPage" parameterType="Map" resultMap="BaseResultMap">
		select
		<include refid="Base_Column_List" />
		from users
		<if test="start!=null and size!=null">
			limit #{start},#{size}
		</if>
	</select>
 
	<!-- 查询用户记录总数 -->
	<select id="Count" resultType="int">
		select count(*) from users
	</select>

3.mapper接口
/*
     * 查询用户记录总数
     * */
    int selectCount();
    /*
     * 分页操作,调用findByPage limit分页方法
     * */
    List<User> findByPage(HashMap<String,Object> map);

4.service接口
 	int Count();
 	
    PageBean<User> findByPage(int currentPage);

5.ServiceImpl实现类
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=5;
		pageBean.setPageSize(pageSize);
		
		//封装总记录数
		int totalCount = userMapper.Count();
		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 = userMapper.findByPage(map);
		pageBean.setLists(lists);
		
		return pageBean;
	}


public int Count() {
        return userMapper.Count();
    }

6.controller
@RequestMapping("/page")
	public String  main(@RequestParam(value="currentPage",defaultValue="1",required=false)int currentPage,Model model){
		model.addAttribute("pagemsg", userService.findByPage(currentPage));//回显分页数据
		return "user/index";
	}

7.jsp页面
<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 }/user/page?currentPage=1">[首页]</a>  
           <a href="${pageContext.request.contextPath }/user/page?currentPage=${requestScope.pagemsg.currPage-1}">[上一页]</a>  
       </c:if>
       
       <c:if test="${requestScope.pagemsg.currPage != requestScope.pagemsg.totalPage}">
           <a href="${pageContext.request.contextPath }/user/page?currentPage=${requestScope.pagemsg.currPage+1}">[下一页]</a>  
           <a href="${pageContext.request.contextPath }/user/page?currentPage=${requestScope.pagemsg.totalPage}">[尾页]</a>  
       </c:if>
   </span>

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值