1.常见错误:
mapping文件中写:
错误写法: LIMIT (#{pageNo}-1)*#{pageSize},#{pageSize}; // 错误
原因:在MyBatis中LIMIT之后的语句不允许的变量不允许进行算数运算,会报错。
正确写法: LIMIT ${(pageNo-1)*pageSize},${pageSize}; (正确)
-----------------------------------------------------------------------------------------------------
其中可以在传递参数的时候进行封装,例如:
1、mapping中使用
<if test="offset != null and limit != null">
limit #{offset}, #{limit}
</if>
2、创建一个query类
package com.uvksoft.common.util;
import java.util.LinkedHashMap;
import java.util.Map;
- /**
* 查询参数
*
* @author LBP
* @date 2018-02-02 11:15
*/
public class Query extends LinkedHashMap<String, Object> {
private static final long serialVersionUID = 1L;
// 当前页码
private int page;
// 每页条数
private int limit;
public Query(Map<String, Object> params) {
this.putAll(params);
// 分页参数
Object pageStr = params.get("page");
Object limitStr = params.get("limit");
if (pageStr != null && limitStr != null) {
this.page = Integer.parseInt(pageStr.toString());
this.limit = Integer.parseInt(limitStr.toString());
} else {// 默认值
this.page = 1;
this.limit = 10000;
}
this.put("offset", (page - 1) * limit);
this.put("page", page);
this.put("limit", limit);
}
public int getPage() {
return Integer.valueOf(this.get("page").toString());
}
public void setPage(int page) {
this.page = page;
this.put("page", this.page);
this.put("offset", (page - 1) * limit);
}
public int getLimit() {
return Integer.valueOf(this.get("limit").toString());
}
public void setLimit(int limit) {
this.limit = limit;
this.put("limit", this.limit);
}
}
3、在控制层传递过来参数时候,对参数传入到Query中
/**
* 代理商动态
* @param params
* @return
*/
@RequestMapping("/agent/wxapp/dynamicList.do")
public Bmp list(@RequestParam Map<String, Object> params) {
Query query = new Query(params); //将参数传入到Query做相关的处理
List<AgentDynamicSet> list = new ArrayList<AgentDynamicSet>();
list = agentDynamicSetService.findAgentDynamicList(query);
int totalCounts = agentDynamicSetService.findTotolCount(params);
Bmp bmp = new Bmp(totalCounts, "list", list, 200, "");
return bmp;
}