ssm框架-简单的分页查询

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>


效果图:





评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值