转载

SpringBoot 入门:06 - 数据分页

在所有增删改查操作里,查找是最常用到的数据库操作,而其中列表查询查得最多,对于列表查询就绕不开数据分页,使用 MyBatis-Plus 为我们封装好的分页插件即可快速实现这个功能。

MyBatis-Plus 配置

在 01 篇中我们已经配置了 MyBatisPlusConfig 类,只需往其中加入分页拦截器即可:

@Bean
public PaginationInterceptor paginationInterceptor() {
    return new PaginationInterceptor();
}
复制代码

列表返回类

对于分页类型的接口,我们的返回格式如下:

{
  "code": 200,
  "msg": "ok",
  "data": {  
    "list": [],
    "page": 1,
    "limit": 5,
    "total": 10,
    "pages": 2,
    "has_more": true
  }
}
复制代码

所以需要定制一个分页返回的类:

package com.foxescap.wxbox.common;

import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.Data;

import java.util.List;

/**
 * @author xfly
 * @param <T>
 */
@Data
public class ApiResponsePage<T> {

    private List<T> list;

    private Long page;

    private Long limit;

    private Long total;

    private Long pages;

    private Boolean hasMore;

    /**
     * IPage 转换成本对象
     * @param iPage 分页实例
     * @return 返回
     */
    public ApiResponsePage<T> convert(IPage<T> iPage) {
        this.list = iPage.getRecords();
        this.page = iPage.getCurrent();
        this.limit = iPage.getSize();

        if (iPage.isSearchCount()) {
            this.total = iPage.getTotal();
            this.pages = iPage.getPages();
            this.hasMore = this.pages > this.page;
        } else {
            this.hasMore = this.list.size() >= this.limit;
        }

        return this;
    }
}
复制代码

然后我们的 Service 层增加一个列表查询方法:

public ApiResponsePage<UserDto> list(String username, Integer page, Integer limit) {
    var query = lambdaQuery();
    if (username.length() > 0) {
        query = query.likeRight(User::getUsername, username);
    }
    var iPage = query.orderByDesc(User::getId)
        .page(new Page<User>(page, limit).setSearchCount(false))
        .convert(e -> modelMapper.map(e, UserDto.class));
    return new ApiResponsePage<UserDto>().convert(iPage);
}
复制代码
原文  https://juejin.im/post/5f1050c26fb9a07e7a53e5ca
正文到此结束
Loading...