springmvc + mybatis+mysql 分页

dao层:

Select * from 表名 limit 12,4

limit 后边的第一个参数是指从第几条开始也就是pageStart;
第二个参数是limit,也就是从pageStart位置往后读多少条数据。
limit 12,4 就是从第12条数据开始往后读4条数据,读取结果是 13,14,15,16 四条数据。
所以当前端传递参数时传递的参数 page =4 limit =10时 在sql中体现为 limit 30,10 。
因为我的请求参数都是从map中取的所以我的计算代码如下:

/**
     * 获取分页起始条数
     * 
     * @param map 传递的查询参数
     * @return
     */
    public static Map<String, Object> getPageMap(Map<String, Object> map) {
        Integer limit = Integer.valueOf((String) map.get("limit"));
        Integer page = Integer.valueOf((String) map.get("page"));
        Integer pageStart = (page - 1) * limit;
        // 起始开始和每次取的条数以int存进map
        map.put("pageStart", pageStart);
        map.put("limit", limit);
        return map;
    }

所以我sql如下:(service层这里不做展示)

<select id="getList" parameterType="map"
        resultMap="userListMap">
Select * from 表名 limit #{pageStart},#{limit}
<select/>

因为分页前端要计算总页数所以前端需要总条数。所以又有了另外一个借口,用于计算总条数。dao层如下(service层很简单不在这里做展示。)

<select id="getListCount"  resultType="int">
        Select
        count(*) from
        [表名]
    </select>

接下来就是返回给前端了。因为给前端的数据包含两部分,数据内容和总条数,所以需要一个包装类result。代码如下(其中的属性值可按照需要自行添加。)


/**
 * 用于封装分页返回结果
 */
public  class PagedResult  {

    private Object list;//数据

    private long total;//总条数

    public Object getList() {
        return list;
    }

    public void setList(Object object) {
        this.list = object;
    }

    public long getTotal() {
        return total;
    }

    public void setTotal(long total) {
        this.total = total;
    }

}

到此controller 就可以给前端返回了,代码如下:

@RequestMapping(method = RequestMethod.GET, produces="application/json;charset=UTF-8")
    @ResponseBody
    public ResponseEntity<?> list(HttpServletRequest request){
        Map<String,Object> queryMap = CommonUtil.getParameterMap(request);
        PagedResult result=new PagedResult();
        result.setList(userService.getList(queryMap));
        result.setTotal(userService.getToolsCount());
        return new ResponseEntity<Object>(result, HttpStatus.OK);
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值