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 getPageMap(Map 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层这里不做展示)
resultMap="userListMap">
Select * from 表名 limit #{pageStart},#{limit}
因为分页前端要计算总页数所以前端需要总条数。所以又有了另外一个借口,用于计算总条数。dao层如下(service层很简单不在这里做展示。)
Select
count(*) from
[表名]
接下来就是返回给前端了。因为给前端的数据包含两部分,数据内容和总条数,所以需要一个包装类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 queryMap = CommonUtil.getParameterMap(request);
PagedResult result=new PagedResult();
result.setList(userService.getList(queryMap));
result.setTotal(userService.getToolsCount());
return new ResponseEntity(result, HttpStatus.OK);
}