Mybaitis框架使用PageHelper插件实现物理分页查询

PageHelper 是 MyBatis框架的 分页插件

优点:

  • 支持常见的 12 种数据库。Oracle,MySql,MariaDB,SQLite,DB2,
    PostgreSQL,SqlServer 等
  • 物理分页

物理分页与逻辑分页的区别:

  • 逻辑分页:
    通过SQL将所有数据全部查询出来,然后通过结果集ResultSets进行类似offset的分页效果,实际上所有的结果已经查询出来了只是显示出来部分而已,常见的是mybatis的RowBounds,作用范围较小,只使用于数据量小变化浮动小的情况。
  • 物理分页:
    物理分离是在获取数据库的返回结果是就已经是offset的数据了,一般会有两种方式:第一种是通过传统的显示LIMIT实现分页,传入pageIndex和pageSize;第二种是通过PageHelper插件,在执行sql的时候通过拦截器进行sql拼接LIMIT,并且提供了PageInfo类返回,PageInfo中封装了返回结果和一些参与分页的详情数据

springboot项目整合pagehelper分页插件实战

项目结构:
在这里插入图片描述

1、需要的依赖:

在这里插入图片描述
其中pageHelper依赖:

<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

maven仓库地址:https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter

2、配置文件

在这里插入图片描述

# 端口
server.port=8073

# mysql数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/tzq?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root

#mybatis控制台打印sql执行语句和结果
#mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

#分页插件配置
pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true

3、准备工作:entity,controller,service,mapper

entity:

/**
 * @Author tangzhiqian
 * @CreateTime 2021/6/10 17:19
 */
@Data
public class Csdn {
    Integer id;
    String title;
    String url;
    Integer isDelete;
}

controller:

/**
 * @Author tangzhiqian
 * @CreateTime 2021/6/10 17:24
 */

@RestController
@RequestMapping("/test")
public class CsdnController {

    @Autowired
    CsdnService csdnService;

    @GetMapping("/selectAll")
    public PageInfo<Csdn> getAll() {
        return csdnService.selectAll();
    }

}

srevice:

/**
 * @Author tangzhiqian
 * @CreateTime 2021/6/10 17:22
 */
@Service
public class CsdnService {
    @Autowired
    CsdnMapper csdnMapper;

    public PageInfo<Csdn>  selectAll(){

        //设置分页参数(第几页,每页记录数)。该代码的下一行数据查询生效分页,下下行查询语句就不生效了,需要再次配置startPage
        PageHelper.startPage(3,5);

        //分页查询生效
        List<Csdn> csdns = csdnMapper.selectList(null);

        //用PageInfo对结果进行包装,
        PageInfo<Csdn> pageInfo = new PageInfo<>(csdns);

        return pageInfo;
    }
}

mapper:

/**
 * @Author tangzhiqian
 * @CreateTime 2021/6/10 17:20
 */
@Repository
@Mapper
public interface CsdnMapper extends BaseMapper<Csdn>{

}

其中,我的分页操作的放在service代码里面的:
在这里插入图片描述
到这里分页环境搭建好了,打开浏览器试试:http://localhost:8073/test/selectAll
在这里插入图片描述
这里显示的是Pageinfo对象的信息(json格式),我们给他美化一下:
在这里插入图片描述
数据库中一共29个字段,这里显示了5个,因为分页查询生效了。

PageInfo类的属性

在使用pageHelper分页查询的时候,我们用PageInfo封装的了结果。
PageInfo到底是什么呢?
PageInfo封装了当前页的所有信息,包括当前页码,总页数,总条数,下一页页码,查询出来的list结果等等:
在这里插入图片描述
PageInfo的属性:

	//当前页
    private int currentPage;
    //总页数
    private int pageCount;
    //总条数
    private int totalRecord;
    //页面大小
    private int pageSize;
    //是否有下一页
    private boolean hasNextPage;
    //是否有上一页
    private boolean hasPrePage;
    //当前页码数组
    private int[] pageArray;
    //当前页数据
    private List<T> list;
    //下一页
    private int nextPage;
    //上一页
    private int prePage;
    //是否是第一页
    private boolean isFirstPage;
    //是否是最后一页
    private boolean isLastPage;
    //开始行数
    private int startRow;
    //结束行数
    private int endRow;
    //需要显示多少页
    private int navigatePages;
    
	public PageInfo() {
        this.navigatePages = 5;		//默认显示5页
        this.hasPrePage = true;
        this.hasNextPage = true;
        this.isFirstPage = false;
        this.isLastPage = true;
    }

评论 49
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值