SpringBoot开发-分页查询功能


前言

日常开发常用的分页查询功能

一、MySQL的分页查询

在 MySQL 中进行分页查询,可以使用 LIMIT 和 OFFSET 子句来实现。MySQL使用分页查询的基本语法如下:

SELECT * FROM table_name LIMIT offset, count;

LIMIT: 用于限制返回的行数。
offset: 指定从查询结果的哪一行开始返回数据。它是从 0 开始计数的,表示跳过前面的多少行记录。
count: 指定返回的行数,即每页的记录数。

例如如下SQL语句:

SELECT * FROM t_user LIMIT 0,1

0是偏移量,1是行数。表示从数据库第1行开始(计数是从0开始计数的),查询总数据为 1条。

二、使用Java实现分页查询

新建一个SpringBoot项目后,能成功启动运行即可,使用原始方法实现分页查询。

1.封装返回结果类

public class R<T> implements Serializable
{
    private static final long serialVersionUID = 1L;

    /** 成功 */
    public static final int SUCCESS = 200;

    /** 失败 */
    public static final int FAIL = 500;

    private int code;

    private String msg;

    private T data;


    public static <T> R<T> ok()
    {
        return restResult(null, SUCCESS, null);
    }

    public static <T> R<T> ok(T data)
    {
        return restResult(data, SUCCESS, null);
    }

    public static <T> R<T> ok(T data, String msg)
    {
        return restResult(data, SUCCESS, msg);
    }



    public static <T> R<T> fail()
    {
        return restResult(null, FAIL, null);
    }

    public static <T> R<T> fail(String msg)
    {
        return restResult(null, FAIL, msg);
    }

    public static <T> R<T> fail(T data)
    {
        return restResult(data, FAIL, null);
    }

    public static <T> R<T> fail(T data, String msg)
    {
        return restResult(data, FAIL, msg);
    }

    public static <T> R<T> fail(int code, String msg)
    {
        return restResult(null, code, msg);
    }

    private static <T> R<T> restResult(T data, int code, String msg)
    {
        R<T> apiResult = new R<>();
        apiResult.setCode(code);
        apiResult.setData(data);
        apiResult.setMsg(msg);
        return apiResult;
    }

    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;
    }

    public T getData()
    {
        return data;
    }

    public void setData(T data)
    {
        this.data = data;
    }
}

2.封装分页查询数据结果

@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {

    private Long total;//总记录数
    private List rows;//数据列表

}

3.接口实现

(1)controller层

 @GetMapping("/pageOne")
    public R pageOne(@RequestParam(value = "pageNum" ,defaultValue = "1") Integer pageNum,
            @RequestParam(value = "pageSize",defaultValue = "10") Integer pageSize){
        return R.ok(userService.selectPageOne(pageNum,pageSize), "查询成功");
    }

(2)service层

PageBean selectPageOne(Integer pageNum, Integer pageSize);

(3)service.impl层

 @Override
    public PageBean selectPageOne(Integer pageNum, Integer pageSize) {

        Long count = userMapper.selectCount(null);

        Integer start = (pageNum - 1) * pageSize;
        List<User> userList = userMapper.page(start, pageSize);

        PageBean page = new PageBean();
        page.setTotal(count);
        page.setRows(userList);
        return  page;
    }

(4)mapper层

@Select("select * from t_user limit #{start},#{pageSize}")
List<User> page(Integer start, Integer pageSize);

三、使用PageHelper分页插件

上述只是简单的分页查询,完全满足不了真正的需求。比如:分页查询中会涉及上一页,下一页,首页,尾页,跳转到x页

1.pagehelper插件依赖

<!--MyBatis起步依赖-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>


<!--PageHelper分页插件-->
<dependency>
     <groupId>com.github.pagehelper</groupId>
     <artifactId>pagehelper-spring-boot-starter</artifactId>
     <version>1.4.7</version>
</dependency>

2.接口实现

(1)controller层

@GetMapping("/pageTwo")
  public R pageTwo(@RequestParam(value = "pageNum" ,defaultValue = "1") Integer pageNum,
                    @RequestParam(value = "pageSize",defaultValue = "10") Integer pageSize){
       return R.ok(userService.selectPageTwo(pageNum,pageSize), "查询成功");
}

(2)service层

返回类型是PageInfo类型

PageInfo<User> selectPageTwo(Integer pageNum, Integer pageSize);

(3)service.impl层

@Override
public PageInfo<User> selectPageTwo(Integer pageNum, Integer pageSize) {
     PageHelper.startPage(pageNum, pageSize);
     List<User> userList = userMapper.selectList(null);
     return new PageInfo<>(userList);
 }

三、MyBatis-Plus分页查询

1.mybatis-plus插件依赖

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.5.4</version>
</dependency>

2.mybatis-plus分页拦截器配置

@Configuration
@MapperScan("com.personal.demo.mapper")
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

3.接口实现

(1)controller层

@GetMapping("/pageThree")
public R pageThree(@RequestParam(value = "pageNum" ,defaultValue = "1") Integer pageNum,
          @RequestParam(value = "pageSize",defaultValue = "10") Integer pageSize){
      return R.ok(userService.pageThree(pageNum, pageSize), "查询成功");
  }

(2)service层

返回类型是IPage类型

IPage<User> pageThree(Integer pageNum, Integer pageSize);

(3)service.impl层

@Override
public IPage<User> pageThree(Integer pageNum, Integer pageSize) {
     Page<User> page = new Page<>(pageNum, pageSize);
     IPage<User> userIPage = userMapper.selectPage(page, null);
     return userIPage;
 }

序言

以上就是日常开发分页功能方法,需要注意的是SpringBoot的版本和MyBatis-Plus的版本、mybatis版本对应关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值