MyBatis 分页插件 PageHelper

在使用PageHelper分页插件时要先添加PageHelper依赖

         
            com.github.pagehelper
            pagehelper-spring-boot-starter
            1.3.1
        

PageHelper类调用父类的startPage()方法并传参,获取Page对象。可以通过此对象获得总记录数。
Page对象内部的属性:

public class Page extends ArrayList 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 findPageObjects(String username, Integer pageCurrent) {
        int pageSize = 5;
        Page page = PageHelper.startPage(pageCurrent, pageSize);
        Listrecords=sysUserDao.findPageObjects(username);
        long rowCount= page.getTotal();
        return new PageObject<>((int)rowCount,records,pageCurrent,pageSize);

    }
}

问题分析:

在springboot项目中引入

         
            com.github.pagehelper
            pagehelper
            5.2.0
        

发现分页没生效

解决办法:发现SpringBoot项目依赖的分页插件和Spring项目有所不同,需要spring-boot-starter下的包才可以。


PageHelper分页原理:底层基于mybatis拦截器做了具体实现。
在我们访问数据库的时候,在MyBatis中用的SqlSession会话对象,它通过发送sql到服务器端,来进行会话。当发送的时候,被拦截器拦截了,拦截的对象是interceptor,实际上PageHelper就是实现了MyBatis中拦截的对象是interceptor这个接口。然后把拦截到的sql语句做了修改。


缺点:和我们自己写limit分页查询相比,性能变低了。因为要先加一个拦截器,然后还要做sql语句的修改

你可能感兴趣的:(MyBatis 分页插件 PageHelper)