Mybatisplus如何使用selectPage
在 MyBatis-Plus 中,selectPage
方法用于执行分页查询。它结合了 Page
对象和条件构造器(如 QueryWrapper
或 LambdaQueryWrapper
),以实现带条件的分页查询。下面是如何使用 selectPage
的详细步骤:
步骤 1:配置分页插件
首先,确保你已经在 Spring Boot 应用中配置了 MyBatis-Plus 的分页插件。这通常是在你的主应用类或配置类中完成的。
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 添加分页拦截器
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
步骤 2:创建 Page 对象
接下来,在你需要进行分页查询的地方创建一个 Page<T>
对象,其中 T
是你希望返回的对象类型。你可以指定当前页码和每页显示的数量来初始化这个对象。
// 假设你有一个实体类 User
long current = 1; // 当前页码
long size = 10; // 每页显示的数量
Page<User> page = new Page<>(current, size);
步骤 3:构建查询条件
使用 LambdaQueryWrapper
或 QueryWrapper
构建查询条件。这里我们使用 LambdaQueryWrapper
来演示。
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getAge, 20); // 示例条件
步骤 4:调用 selectPage 方法
最后,通过 Mapper 接口调用 selectPage
方法,并传入 Page<T>
和 Wrapper
参数。
// userMapper 是你定义的 Mapper 接口
IPage<User> userPage = userMapper.selectPage(page, queryWrapper);
// 获取分页后的结果列表
List<User> userList = userPage.getRecords();
// 获取总记录数等信息
long total = userPage.getTotal();
完整示例代码
将上述步骤组合起来,完整的分页查询代码如下:
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/users")
public void getUsers() {
long current = 1; // 当前页码
long size = 10; // 每页显示的数量
Page<User> page = new Page<>(current, size);
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getAge, 20); // 示例条件
IPage<User> userPage = userMapper.selectPage(page, queryWrapper);
List<User> userList = userPage.getRecords();
long total = userPage.getTotal();
// 这里可以添加逻辑处理分页结果
}
}