在使用PageHelper分页插件时要先添加PageHelper依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
PageHelper类调用父类的startPage()方法并传参,获取Page对象。可以通过此对象获得总记录数。
Page对象内部的属性:
public class Page<E> extends ArrayList<E> implements Closeable {
private static final long serialVersionUID = 1L;
private int pageNum;
private int pageSize;
private long startRow;
private long endRow;
private long total;
private int pages;
private boolean count;
private Boolean reasonable;
private Boolean pageSizeZero;
private String countColumn;
private String orderBy;
private boolean orderByOnly;
private BoundSqlInterceptor boundSqlInterceptor;
private transient Chain chain;
PageHelper分页插件具体使用如下:
@Service
public class SysUserServiceImpl implements SysUserService {
@Autowired
private SysUserDao sysUserDao;
@Override
public PageObject<SysUser> findPageObjects(String username, Integer pageCurrent) {
int pageSize = 5;
Page<Object> page = PageHelper.startPage(pageCurrent, pageSize);
List<SysUser>records=sysUserDao.findPageObjects(username);
long rowCount= page.getTotal();
return new PageObject<>((int)rowCount,records,pageCurrent,pageSize);
}
}
问题分析:
在springboot项目中引入
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
发现分页没生效
解决办法:发现SpringBoot项目依赖的分页插件和Spring项目有所不同,需要spring-boot-starter下的包才可以。
PageHelper分页原理:底层基于mybatis拦截器做了具体实现。
在我们访问数据库的时候,在MyBatis中用的SqlSession会话对象,它通过发送sql到服务器端,来进行会话。当发送的时候,被拦截器拦截了,拦截的对象是interceptor,实际上PageHelper就是实现了MyBatis中拦截的对象是interceptor这个接口。然后把拦截到的sql语句做了修改。
缺点:和我们自己写limit分页查询相比,性能变低了。因为要先加一个拦截器,然后还要做sql语句的修改
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。