springboot+mybatisplus分页查询详解

 常用方法:

日常开发中,分页查询是常见的查询方式,分页查询有几种不同的方式,这里介绍一种我最常用的方法;

首先pom.xml文件中引入依赖

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
</dependency>

分页配置类

@Configuration
public class MyBatisConfig {
    @Bean
    public MybatisPlusInterceptor paginationInterceptor() {
        //新建MybatisPlus拦截器
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();

        //新建分页拦截器paginationInnerInterceptor
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();

        //把分页拦截器添加到MybatisPlus拦截器中
        mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);
        //添加组件,大功告成!
        return mybatisPlusInterceptor;
    }
}

自定义列表返回对象:

@Data
public class PageResult<T> implements Serializable {
    private Long total;

    private List<T> records;

    public PageResult() {
    }

    public PageResult(Long total, List<?> records) {
        this.total = total;
        this.records = (List<T>) records;
    }

    public Long getTotal() {
        return total;
    }

    public void setTotal(Long total) {
        this.total = total;
    }

    public List<?> getRecords() {
        return records;
    }

    public void setRecords(List<?> records) {
        this.records = (List<T>) records;
    }
}

准备就绪开始分页查询(这里介绍单表查询,多表查询需要自己写Sql):

分页查询类:

@Data
@Builder
public class FileQuery {

    /**
     * 分页参数
     */
    private Integer page = 1;

    private Integer pageSize = 10;

    /**
     * 上传类型
     */
    @NotBlank(message = "上传类型不能为空", groups = {Update.class, Add.class})
    private String uploadType;

    /**
     * 文件key
     */
    @NotBlank(message = "文件key", groups = {Update.class, Add.class})
    private String fileKey;

    /**
     * 文件类型
     */
    @NotBlank(message = "文件类型不能为空", groups = {Update.class, Add.class})
    private String fileType;

    /**
     * 文件大小
     */
    @NotNull(message = "文件大小不能为空", groups = {Update.class, Add.class})
    private Double fileSize;

    /**
     * 文件原始名
     */
    @NotBlank(message = "文件原始名不能为空", groups = {Update.class, Add.class})
    private String fileOldName;

    /**
     * 开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime startTime;

    /**
     * 结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime endTime;

}

Controller层:

  @GetMapping("/page")
    public PageResult page(FileQuery query){
        log.info("分页查询文件:{}",query);
        return fileService.pageQuery(query);
    }

Service层:

PageResult pageQuery(FileQuery query);

ServiceImpl实现类:

 @Override
    public PageResult pageQuery(FileQuery query) {
        Page<File> page = new Page<>(query.getPage(), query.getPageSize());

        new LambdaQueryChainWrapper<>(fileMapper)
                .eq(StringUtils.hasText(query.getUploadType()),File::getUploadType,query.getFileType())
                .eq(StringUtils.hasText(query.getFileKey()),File::getFileKey,query.getFileKey())
                .eq(StringUtils.hasText(query.getFileType()),File::getFileType,query.getFileType())
                .eq(Objects.nonNull(query.getFileSize()),File::getFileSize,query.getFileSize())
                .like(StringUtils.hasText(query.getFileOldName()),File::getFileOldName,query.getFileOldName())
.page(page);

        long total = page.getTotal();
        List<File> records = page.getRecords();

        return new PageResult<>(total,records);
    }

使用若依框架进行分页查询

若依框架封装了分页工具类,可以直接使用

自定义列表返回对象:

public class TableDataInfo implements Serializable
{
    private static final long serialVersionUID = 1L;

    /** 总记录数 */
    private long total;

    /** 列表数据 */
    private List<?> rows;

    /** 消息状态码 */
    private int code;

    /** 消息内容 */
    private String msg;

    /**
     * 表格数据对象
     */
    public TableDataInfo()
    {
    }

    /**
     * 分页
     * 
     * @param list 列表数据
     * @param total 总记录数
     */
    public TableDataInfo(List<?> list, int total)
    {
        this.rows = list;
        this.total = total;
    }

    public long getTotal()
    {
        return total;
    }

    public void setTotal(long total)
    {
        this.total = total;
    }

    public List<?> getRows()
    {
        return rows;
    }

    public void setRows(List<?> rows)
    {
        this.rows = rows;
    }

    public int getCode()
    {
        return code;
    }

    public void setCode(int code)
    {
        this.code = code;
    }

    public String getMsg()
    {
        return msg;
    }

    public void setMsg(String msg)
    {
        this.msg = msg;
    }
}

Controller层:

/**
     * 列表查询解决方案
     */
    @GetMapping("/solutionList")
    public TableDataInfo page(OaSolutionQuery query) {
        PageHelper.startPage(query.getPageNum(), query.getPageSize());
        List<OaSolution> list = oaSolutionService.list(query);
        return MyPageUtil.myPageDataInfo(list);
    }

Service层:

  List<OaSolution> list(OaSolutionQuery query);

ServiceImpl实现类:

 @Override
    public List<OaSolution> list(OaSolutionQuery query) {
        return oaSolutionMapper.list(query);

    }

 Mapper接口:

 List<OaSolution> list(OaSolutionQuery query);

Mapper.xml文件中写Sql语句(我这里是多表查询关联了别的表):

 <select id="list" resultType="com.oas.contract.domain.OaSolution">
        select os.id,
               os.solution_subject   as solutionSubject,
               os.customer_name      as customerName,
               os.project_name       as projectName,
               os.customer_demand_id as customerDemandId,
               os.report_type_id     as reportTypeId,
               os.amount             as osAmount
        from oa_solution os
                 left join oas.oa_customer_demand ocd on os.customer_demand_id = ocd.customer_demand_id
                 left join oas.oa_business_opportunity obo on os.id = obo.project_id
        where os.id = #{id}
        order by os.create_time desc
    </select>

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值