PageHelper 地址:https://pagehelper.github.io/
Maven依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>最新版本</version>
</dependency>
或者直接用 二选一
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>最新版本</version>
</dependency>
PageHelper配置类
import com.github.pagehelper.PageHelper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
@Configuration
public class PageHelperConfig {
@Bean
public PageHelper pageHelper() {
PageHelper pageHelper = new PageHelper();
Properties p = new Properties();
p.setProperty("offsetAsPageNum", "true");
p.setProperty("rowBoundsWithCount", "true"); // 将该参数设置为 true 后,offset会当成 pageNum 使用,limit 和 pageSize 含义相同。
p.setProperty("reasonable", "true"); // reasonable 为 true,这时如果 pageNum<=0 会查询第一页,如果 pageNum>总页数 会查询最后一页。
p.setProperty("dialect", "mysql"); // 配置mysql数据库
pageHelper.setProperties(p);
return pageHelper;
}
}
PageHelper 用法主要就是:在serviceimpl 执行mapper前 加入 PageHelper.startPage(page, pageSize)。
说明:startPage是个静态方法,他的作用白话是:紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。但是要深入记忆的一点是:startPage()实现与ThreadLocal一样:是执行startPage()时,会记录线程信息,之后的此线程第一次Select会被执行分页。分页后,PageHelper会在其自己finally块执行clearPage()
PageHelper乱分页问题产生原因
List<User> list;
PageHelper.startPage(1, 10);
if(param1 != null){
list = userMapper.selectIf(param1);
} else {
list = new ArrayList<User>();
}
上文代码看似没啥问题,但是要记住PageHelper.startPage是线程级别的分页,一旦这个线程A出现异常,但是这个PageHelper没有对线程A执行PageHelper.clearPage();就会导致下个接口使用线程A时,出现各种各样的异常。所以最保险的情况就是
PageHelper.startPage(1, 10);
try{
// todo 做业务查询
} finally {
PageHelper.clearPage();
}
最后附上日常开发API
PageHelper.clearPage(); // 清除此线程的下次查询的分页
//PageHelper.startPage(page, pageSize,false); //通过PageInfo得到的total是-1
//PageHelper.startPage(page, pageSize,true); 等价于 PageHelper.startPage(page, pageSize);
PageHelper.startPage(page, pageSize); //此语句默认会有count计数 可通过PageInfo.getTotal(),得到查询的结果数。
new PageInfo<>(xxxMapper.selectByAllWithCondition(obj));
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
评论(0)