使用ThreadLocal改造下mybatis简单分页
借鉴mybatis PageHelper插件
在action层保存分页信息到ThreadLocal
public class BaseAction {
public static ThreadLocal<Map<String, String>> threadLocal = new ThreadLocal<>();
public void setPage(HttpServletRequest request) {
Map<String, String> map = new HashMap<>();
map.put("start", request.getParameter("start"));
map.put("length", request.getParameter("length"));
threadLocal.set(map);
}
public static String getLimit() {
Map<String, String> map = threadLocal.get();
if (map != null && !Strings.isNullOrEmpty(map.get("start")) && !Strings.isNullOrEmpty(map.get("start"))) {
return String.format(" limit %s,%s ", map.get("start"), map.get("length"));
}
return "";
}
}
在mapper里面获取分页信息(新学会在mapper.xml中使用@符号获取对象常量和方法)
${@com.jbc.action.BaseAction@getLimit()}
以前的做法,实体类和Example继承公用实体类(使用MyBatisGenerator自动生成的实体类和mapper,懒得写sql),里面有start和length,然后mapper.xml里面获取这两个值
ProjectExample example = new ProjectExample();
example.setStart(project.getStart());
example.setLength(project.getLength());
<if test="start!=null and length!=null and length!=0">
limit ${start},${length}
</if>
网友评论