MyBatis Plus 实现分页功能

MyBatis Plus(MP)是一个 MyBatis 的扩展插件,它提供了很多便捷的功能,如自动分页、自动填充字段等。使用 MyBatis Plus 进行分页非常简便,只需几行代码即可完成。

以下是使用 MyBatis Plus 进行分页的具体步骤:

1. 添加依赖

首先,在你的项目中添加 MyBatis Plus 的依赖。如果你使用 Maven,可以在 pom.xml 文件中添加以下依赖:

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

2. 配置 MyBatis Plus

通常情况下,如果你使用的是 Spring Boot,MyBatis Plus 会自动配置好大部分内容。你只需要确保 DataSourceSqlSessionFactory 已经正确配置。

3. 定义 Entity 和 Mapper

Entity 类

首先,定义一个实体类,例如 User

package com.example.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("users")
public class User {
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    private String userName;
    private String departmentId;
    // 其他属性...
}
Mapper 接口

接下来,定义一个 Mapper 接口,继承 BaseMapper

package com.example.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.entity.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 可以在这里定义其他自定义的查询方法
}

4. 使用分页查询

在 Service 层中,你可以使用 Page 对象来进行分页查询。以下是一个示例:

Service 接口
package com.example.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.entity.User;

public interface UserService extends IService<User> {
    Page<User> getUserWithDepartmentAndOrders(int currentPage, int pageSize);
}
Service 实现
package com.example.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import com.example.service.UserService;
import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import javax.annotation.Resource;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    @Resource
    private UserMapper userMapper;

    @Override
    public IPage<User> getUserWithDepartmentAndOrders(int currentPage, int pageSize) {
        // 创建分页对象
        IPage<User> page = new Page<>(currentPage, pageSize);

        // 执行分页查询
        userMapper.selectPage(page, null); // null 表示没有额外的查询条件

        return page;
    }
}

5. 控制器层

在控制器层中调用 Service 层的方法,并返回分页信息:

package com.example.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.entity.User;
import com.example.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/paged")
    public IPage<User> getUsersPaged(@RequestParam int currentPage, @RequestParam int pageSize) {
        return userService.getUserWithDepartmentAndOrders(currentPage, pageSize);
    }
}

6. 测试分页

通过发送 HTTP 请求来测试分页功能:

GET /users/paged?currentPage=1&pageSize=10

7. 分页查询的参数

在 MyBatis Plus 中,IPage 是一个泛型接口,提供了分页查询所需的所有信息。你可以通过以下方法获取分页信息:

  • IPage.getTotal(): 获取总记录数。
  • IPage.getPages(): 获取总页数。
  • IPage.getCurrent(): 当前页码。
  • IPage.getSize(): 每页记录数。
  • IPage.getRecords(): 获取当前页的数据列表。

示例输出

假设你发送了分页请求,返回的 JSON 数据可能如下所示:

{
    "records": [
        // 当前页的数据列表
    ],
    "total": 98,
    "pages": 10,
    "current": 1,
    "size": 10,
    "hasNext": true,
    "hasPrevious": false,
    "isFirstPage": true,
    "isLastPage": false,
    "navigatePages": 8,
    "navigatepageNums": [1, 2, 3, 4, 5, 6, 7, 8],
    "prePage": 0,
    "nextPage": 2
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值