# 分页

# 分页概述

分页在项目开发中是必不可少的功能,后台数据管理中会对系统数据进行分页查询并显示,分页的功能无处不在, 主要目的是实现数据的快速查询以及更好的对数据进行维护操作。本平台中使用了MyBatisPlus分页插件, 需要新建分页配置文件MybatisPlusConfig,该具体配置文件如下:

package com.mediway.hos.database.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {

    /**
     * 分页插件
     *
     * @return
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

在基础包hos-framework-database-starter下已经进行了分页插件配置,开发人员直接参考下面的介绍使用即可

# 后端单表分页实现

后端封装了查询条件基类BaseEntity, 该文件包括分页参数currentsize,每个业务模块查询条件只需继承查询基类即可拥有分页查询参数条件,BaseEntity基类查询条件内容如下:

package com.mediway.hos.database.model;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.util.Date;

@Data
public class BaseEntity {

    //此处省略...

    /*
     * 当前页
     */
    @TableField(exist = false)
    private Integer current;

    /*
     * 每页数量
     */
    @TableField(exist = false)
    private Integer size;

}

后端封装的基类BaseController中封装了selectPage方法,它的作用是根据实体属性条件进行分页查询。入参对象是继承BaseEntity的实体对象,实体对象需要传入分页相关信息和属性查询相关信息。selectPage方法如下:

package com.mediway.hos.database.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mediway.hos.database.model.BaseEntity;
import com.mediway.hos.base.model.BaseResponse;
import com.mediway.hos.database.service.BaseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

public class BaseController<T extends BaseEntity> {

    @Autowired
    private BaseService<T> baseService;
    
    // 省略...

    /**
     * 根据实体属性条件分页查询
     *
     * @param t 实体对象
     * @return
     */
    @GetMapping("/selectPage")
    public BaseResponse<IPage<T>> selectPage(T t) {
        IPage<T> pageData = baseService.selectPage(new Page<>(t.getPageIndex(), t.getPageSize()), t);
        return BaseResponse.success(pageData);
    }

}

# 使用

我们直接使用BaseController中的selectPage方法进行分页查询,接口的请求方式、入参数据和响应结果如下所示:

请求方式

url:http://localhost:8367/api/user/staff/selectPage
method:GET
Content-Type: 参数拼接或者是multipart/form-data皆可

url参数拼接方式请求

http://localhost:8367/api/user/staff/selectPage?name=静静&current=1&size=10

或者request body是multipart/form-data方式请求

param_1

响应结果如下

{
    "code":"200",
    "msg":"success",
    "data":{
        "records":[
            {
                "id":"293bafb9f3094c6b9c3429c12e49cce2",
                "createTime":null,
                "updateTime":null,
                "current":null,
                "size":null,
                "name":"静静",
                "gender":"女",
                "age":28,
                "orgId":null,
                "email":"jingjing@qq.com",
                "phone":"13201122530",
                "description":"jingjing"
            }
        ],
        "total":1,
        "size":10,
        "current":1,
        "searchCount":true,
        "pages":1
    },
    "success":true
}