在项目是使用PageHelper做分页的时候,设置的起始页和每页显示条数总是不起作用。
后来到PageHelper作者的GitHub主页才发现原因是PageHelper.startPage所放在程序的位置的原因:
” 在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。“
//分页插件
PageHelper.startPage(getPageNo(request), getPageSize(request), getOrderBy(request));
//第一条查询语句
String group = rulingService.findUserGroup(request.getParameter("dingUserId"));
//第二条查询语句
List<RulingPo> rulings = rulingService.findRuling(ruling,gropus);
我本来是想分页第二条的查询语句,这样写的结果就是分页使用在了第一条查询语句,调换位置即可。
因为PageHelper方法使用了静态的ThreadLocal参数,分页参数和线程是绑定的。
只要你可以保证在PageHelper方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为PageHelper在finally代码段中自动清除了ThreadLocal存储的对象。