MyBatis-Plus 分页查询

结果来自于GPT,做归档留存

使用 MyBatis-Plus 进行分页查询并返回分页信息非常方便。MyBatis-Plus 提供了内置的分页插件,可以自动处理分页逻辑,并返回分页相关的信息,如当前页数、每页记录数、总记录数等。

下面是一个使用 MyBatis-Plus 进行分页查询并返回分页信息的示例:

1. 引入依赖

首先,确保你的项目中已经引入了 MyBatis-Plus 的相关依赖。如果还没有,可以在 pom.xml 中添加以下依赖:

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

2. 配置分页插件

在 MyBatis-Plus 中,你需要配置分页插件才能启用分页功能。你可以在配置类中添加以下内容:

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

@Configuration
public class MyBatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

3. 创建 Mapper 接口

创建一个 Mapper 接口,并继承 MyBatis-Plus 提供的 BaseMapper 接口。

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

@Mapper
public interface UserMapper extends BaseMapper<User> {
}

4. 编写服务层方法

在服务层中编写分页查询的方法。

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public IPage<UserDTO> getUsersByPage(int currentPage, int pageSize) {
        // 创建分页对象
        Page<User> page = new Page<>(currentPage, pageSize);
        // 执行分页查询
        IPage<User> userPage = userMapper.selectPage(page, null);

        // 将分页结果转换为DTO
        IPage<UserDTO> userDTOPage = userPage.convert(user -> {
            UserDTO userDTO = new UserDTO();
            userDTO.setId(user.getId());
            userDTO.setName(user.getName());
            userDTO.setEmail(user.getEmail());
            return userDTO;
        });

        return userDTOPage;
    }
}

5. 创建 DTO 类

创建一个用于返回分页结果的 DTO 类。

public class UserDTO {
    private Long id;
    private String name;
    private String email;

    // getters and setters
}

6. 测试分页查询

在控制器中调用服务层的方法进行测试。

import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public IPage<UserDTO> getUsers(@RequestParam int currentPage, @RequestParam int pageSize) {
        return userService.getUsersByPage(currentPage, pageSize);
    }
}

结果示例

访问 /users?currentPage=1&pageSize=10 时,返回的结果示例:

{
    "records": [
        {
            "id": 1,
            "name": "John Doe",
            "email": "john.doe@example.com"
        },
        {
            "id": 2,
            "name": "Jane Doe",
            "email": "jane.doe@example.com"
        }
    ],
    "total": 50,
    "size": 10,
    "current": 1,
    "pages": 5
}

通过上述步骤,你可以使用 MyBatis-Plus 轻松实现分页查询,并返回包含分页信息的 DTO 对象。

posted @ 2024-06-17 16:46  gjf123  阅读(126)  评论(0)    收藏  举报