开发者

MyBatis-Plus 分页插件使用示例

目录
  • 一、项目包结构
  • 二、实体类 (User.Java)
  • 三、Mapper 接口 (UserMapper.java)
  • 四、Service 接口 (UserService.java)
  • 五、Service 实现 (UserServiceImpl.java)
  • 六、Controller (UserController.java)
  • 七、配置类 (MyBATisPlusConfig.java)
  • 八、启动类 (HisWebApplication.java)
  • 九、使用示例
    • 1. 访问分页接口
    • 2. 带条件的分页查询
  • 十、分页插件工作原理
    • 十一、配置说明

      一、项目包结构

      src/main/java
      └─ com.neuedu.hisweb
         ├── config
         │   └── MybatisPlusConfig.java     // 配置类(已提供)
         ├── controller
         │   └── UserController.java        // 控制器
         ├── entity
         │   └── User.java                  // 实体类
         ├── mapper
         │   └── UserMapper.java            // Mapper 接口
         ├── service
         │   ├── UserService.java           // Service 接口
         │   └── impl
         │       └── UserServiceImpl.java   // Service 实现
         └── HisWebApplication.java         // 启动类

      二、实体类 (User.java)

      package com.neuedu.hisweb.entity;
       
      import com.baomidou.mybatisplus.annotation.TableId;
      import com.baomidou.mybatisplus.annotation.TableName;
      import lombok.Data;
       
      @Data
      @TableName("user")  // 对应数据库表名
      public class User {
          @TableId  // 主键注解
          private Long id;
          private String username;
          private String password;
          private Integer age;
          private String email;
      }

      三、Mapper 接口 (UserMapper.java)

      package com.neuedu.hisweb.mapper;
       
      import com.baomidou.mybatisplus.core.mapper.BaseMapper;
      import com.neuedu.hisweb.entity.User;
      import org.apache.ibatis.annotations.Mapper;
       
      @Mapper
      public interface UserMapper extends BaseMapper<User> {
          // 继承 BaseMapper 后,自动拥有 CRUD 方法
          // 无需编写 selectById, insert, update, delete 等方法
      }

      四、Service 接口 (UserService.java)

      package com.neuedu.hisweb.service;
       
      import com.baomidou.mybatisplus.core.metadata.IPage;
      import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
      import com.neuedu.hisweb.entity.User;
       
      public interface UserService {
          // 分页查询用户列表
          IPage<User> getUserPage(Page<User> page);
          
          // 条件分页查询
          IPage<User> getUserPageByCondition(Page<User> page, String username);
      }

      五、Service 实现 (UserServiceImjavascriptpl.java)

      package com.neuedu.hisweb.service.impl;
       
      import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
      import com.baomidou.mybatisplus.core.metadata.IPage;
      import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
      import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
      import com.neuedu.hisweb.entity.User;
      import com.neuedu.hisweb.mapper.UserMapper;
      import com.neuedu.hisweb.service.UserService;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Service;
       
      @Service
      public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
          
          @Autowired
          private UserMapper userMapper;
          
          // 分页查询所有用户
          @Override
          public IPage<User> getUserPage(Page<User> page) {
              // Page 参数包含页码和每页条数
              // 调用 BaseMapper 的 selectPage 方法,自动生成分页 SQL
              return userMapper.selectPage(page, null);  // null 表示无查询条件
          }
          
          // 条件分页查询
          @Override
          public IPage<User> getUserPageByCondition(Page<User> page, String username) {
              QueryWrapper<User> queryWrapper = new QueryWrapper<>();
              queryWrapper.like("username", username);  // 模糊查询用户名
              
              // 带条件的分页查询
              return userMapper.selectPage(page, queryWrapper);
          }
      }

      六、Controller (UserControljavascriptler.java)

      package com.neuedu.hisweb.controller;
       
      import com.baomidou.mybatisplus.core.mhttp://www.devze.cometadata.IPage;
      import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
      import com.neuedu.hisweb.entity.User;
      import com.neuedu.hisweb.service.UserService;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.web.bind.annotation.*;
       
      @RestController
      @RequestMapping("/api/users")
      public class UserController {
          
          @Autowired
          private UserService userService;
          
          // 分页查询用户列表
          @GetMapping("/page")
          public IPage<User> getUserPage(
                  @RequestParam(defaultValue = "1") Inthttp://www.devze.comeger pageNum,  // 页码,默认第1页
                  @RequestParam(defaultValue = "10") Integer pageSize  // 每页条数,默认10条
          ) {
              // 创建分页对象
              Page<User> page = new Page<>(pageNum, pageSize);
              
              // 调用 Service 方法进行分页查询
              return userService.getUserPage(page);
          }
          
          // 条件分页查询
          @GetMapping("/page/condition")
          public IPage<User> getUserPageByCondition(
                  @RequestParam(defaultValue = "1") Integer pageNum,
                  @RequestParam(defaultValue = "10") Integer pageSize,
                  @RequestParam(required = false) String username  // 可选参数:用户名
          ) {
              Page<User> page = new Page<>(pageNum, pageSize);
              
              // 带条件的分页查询
              return userService.getUserPageByCondition(page, username);
          }
      }

      七、配置类 (MybatisPlusConfig.java)

      package com.neuedu.hisweb.config;
       
      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;
       
      /**
       * MyBatis-Plus 配置类
       */
      @Configuration
      public class MybatisPlusConfig {
       
          @Bean
          public MybatisPlusInterceptor mybatisPlusInterceptor() {
              // 创建 MyBatis-Plus 拦截器管理器
              MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
              
              // 添加分页插件
              interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
              
              // 可以添加其他插件(如乐观锁、逻辑删除等)
              // interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
              
              return interceptor;
        javascript  }
      }

      八、启动类 (HisWebApplication.java)

      package com.neuedu.hisweb;
       
      import org.mybatis.spring.annotation.MapperScan;
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
       
      @SpringBootApplication
      @MapperScan("com.neuedu.hisweb.mapper")  // 扫描 Mapper 接口
      public class HisWebApplication {
          public static void main(String[] args) {
              SpringApplication.run(HisWebApplication.class, args);
          }
      }

      九、使用示例

      1. 访问分页接口

      通过浏览器或 Postman 访问:

      GET http://localhost:8080/api/users/page?pageNum=1&pageSize=5 

      2. 带条件的分页查询

      GET http://localhost:8080/api/users/page/condition?pageNum=1&pageSize=5&username=张 

      十、分页插件工作原理

      拦截器生效

      当调用 selectPage() 方法时,PaginationInnerInterceptor 会拦截 SQL 查询。

      自动生成分页 SQL

      • 对于 mysql,会自动添加 LIMIT ? OFFSET ?
      • 对于 oracle,会添加 ROWNUM 相关的分页语法。

      返回分页结果

      结果包含总记录数、总页数、当前页数据等信息:

      {
          "records": [ /* 当前页数据 */ ],
          "total": 100,      // 总记录数
          "size": 10,        // 每页条数
          "current": 1,      // 当前页码
          "pages": 10        // 总页数
      }

      十一、配置说明

      分页插件配置

      // 可自定义分页插件参数
      PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor();
      paginationInterceptor.setMaxLimit(1000L);  // 限制单页最大条数
      paginationInterceptor.setOverflow(false);  // 溢出总页数后是否进行处理
      interceptor.addInnerInterceptor(paginationInterceptor);

      多数据源配置

      若使用多数据源,需指定数据库类型:

      paginationInterceptor.setDbType(DbType.MYSQL);
      

      我们可以轻松实现分页查询功能,无需手动编写复杂的分页 SQL。

      到此这篇关于MyBatis-Plus 分页插件使用示例的文章就介绍到这了,更多相关MyBatis-Plus 分页插件内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜