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);
}