使用mybatis plus的@Select自定义sql时,如何实现通用的分页查询?

在 MyBatis Plus 中使用 @Select 自定义 SQL 实现通用的分页查询,可按以下步骤操作:

1. 配置分页插件

首先,需要在项目中配置 MyBatis Plus 的分页插件。以 Spring Boot 项目为例,在配置类中添加分页插件的 Bean:

java 复制代码
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. 定义实体类

假设我们有一个 User 实体类:

java 复制代码
import com.baomidou.mybatisplus.annotation.TableName;

@TableName("user")
public class User {
    private Long id;
    private String name;
    private Integer age;

    // 构造函数、Getter 和 Setter 方法
    public User() {}

    public User(Long id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

3. 定义 Mapper 接口

在 Mapper 接口中使用 @Select 注解编写自定义 SQL,并接收 Page 对象作为参数:

java 复制代码
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Select;

public interface UserMapper extends BaseMapper<User> {

    @Select("SELECT * FROM user WHERE age > #{age}")
    IPage<User> selectUserByAge(Page<User> page, Integer age);
}

4. 实现分页查询服务

在服务层调用 Mapper 接口的方法进行分页查询:

java 复制代码
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<User> getUserByAgePage(Integer pageNum, Integer pageSize, Integer age) {
        Page<User> page = new Page<>(pageNum, pageSize);
        return userMapper.selectUserByAge(page, age);
    }
}

5. 调用分页查询方法

在控制器或测试类中调用服务层的方法进行分页查询:

java 复制代码
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<User> getUsers(@RequestParam Integer pageNum, @RequestParam Integer pageSize, @RequestParam Integer age) {
        return userService.getUserByAgePage(pageNum, pageSize, age);
    }
}

解释

  • 分页插件配置MybatisPlusInterceptor 是 MyBatis Plus 的拦截器,PaginationInnerInterceptor 是分页拦截器,用于实现分页功能。
  • Mapper 接口@Select 注解中的 SQL 是自定义的查询语句,Page 对象作为参数传入,MyBatis Plus 会自动处理分页逻辑。
  • 服务层 :创建 Page 对象,设置当前页码和每页记录数,调用 Mapper 接口的方法进行分页查询。
  • 控制器:接收前端传入的页码、每页记录数和查询条件,调用服务层的方法进行分页查询并返回结果。

通过以上步骤,就可以在 MyBatis Plus 中使用 @Select 自定义 SQL 实现通用的分页查询。

相关推荐
星星点点洲8 分钟前
【Redis】谈谈Redis的设计
数据库·redis·缓存
HelloZheQ10 分钟前
MVCC:数据库并发控制的利器
服务器·数据库·oracle
hie9889418 分钟前
使用Spring Boot集成Nacos
java·spring boot·后端
珹洺22 分钟前
Jsp技术入门指南【十四】实现基于MySQL+JDBC+JSP数据库验证的登录界面与登录跳转功能
java·运维·数据库·mysql·servlet
JhonKI30 分钟前
【MySQL】日志缓冲区详解 以及 InnoDB内存结构总结
数据库·mysql·oracle
源码方舟34 分钟前
基于SpringBoot+Vue的房屋租赁管理系统源码包(完整版)开发实战
vue.js·spring boot·后端
vvilkim1 小时前
MySQL视图:虚拟表的强大功能与应用实践
数据库·mysql
tangjunjun-owen1 小时前
Milvus 2.4 使用详解:从零构建向量数据库并实现搜索功能(Python 实战)
数据库·python·milvus·rag
GalenZhang8881 小时前
langchain4j中使用milvus向量数据库做RAG增加索引
数据库·milvus
闪电麦坤952 小时前
思路解析:第一性原理解 SQL
服务器·数据库·sql