当前位置: 首页 > article >正文

使用AI一步一步实现若依(20)

功能20:使用分页插件

功能19:集成MyBatis-Plus
功能18:创建后端工程
功能17:菜单管理
功能16:角色管理
功能15:用户管理
功能14:使用本地SVG图标库
功能13:侧边栏加入Logo
功能12:折叠/展开侧边栏
功能11:实现面包屑功能
功能10:添加首页菜单项
功能9:退出登录功能
功能8:页面权限控制
功能7:路由全局前置守卫
功能6:动态添加路由记录
功能5:侧边栏菜单动态显示
功能4:首页使用Layout布局
功能3:点击登录按钮实现页面跳转
功能2:静态登录界面
功能1:创建前端项目

前言

MyBatis-Plus 的分页插件 PaginationInnerInterceptor 提供了强大的分页功能,支持多种数据库(如 MySQL、Oracle、PostgreSQL),通过简单的配置即可实现高效的分页查询。MyBatis-Plus 的分页功能具有以下优势:
无侵入性:无需修改原有 Mapper 接口和 SQL 语句。
自动化处理:自动拼接 COUNT 查询语句,计算总记录数。
多数据库支持:通过 DbType 配置适配不同数据库方言。
与 Spring Boot 深度整合:通过 Starter 依赖快速集成。

一.操作步骤

1.引入依赖

通过 Maven BOM(Bill of Materials) 统一管理依赖版本,避免多模块项目中版本冲突问题。

    <dependencies>
        <!-- MyBatis-Plus 与 Spring Boot 3 整合的启动器(核心依赖) -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
            <!-- 无需指定版本,由上方 BOM 统一管理 -->
        </dependency>
        <!-- MyBatis-Plus 的 SQL 解析器(用于复杂 SQL 功能,如动态表名、逻辑删除等) -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-jsqlparser</artifactId>
            <!-- 无需指定版本,由 BOM 统一管理 -->
        </dependency>
    </dependencies>
    <!-- 依赖管理:统一管理依赖版本,避免版本冲突 -->
    <dependencyManagement>
        <dependencies>
            <!-- 引入 MyBatis-Plus 的 BOM(Bill of Materials),锁定所有子依赖的版本 -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-bom</artifactId>
                <version>3.5.10.1</version>  <!-- BOM 版本 -->
                <type>pom</type>
                <scope>import</scope>  <!-- 导入作用域,继承版本定义 -->
            </dependency>
        </dependencies>
    </dependencyManagement>

2.配置类MybatisPlusConfig

新建文件:src/main/java/com/ruoyi/config/MybatisPlusConfig.java
创建配置类注册分页插件,并集中管理 MyBatis-Plus 相关配置。

/**
 * MyBatis-Plus 配置类
 * 1. 扫描 Mapper 接口路径(替代启动类上的 @MapperScan)
 * 2. 注册分页插件
 */
@Configuration
@MapperScan("com.ruoyi.system.mapper") // 集中管理 Mapper 扫描路径
public class MybatisPlusConfig {

    /**
     * 注册 MyBatis-Plus 插件
     * 注意:若需多个插件,分页插件需最后添加(避免分页计数错误)
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 分页插件(适配 MySQL 数据库)
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        // 可添加其他插件(如乐观锁、动态表名等)
        return interceptor;
    }
}

关键点解释
@MapperScan:用于扫描 Mapper 接口,替代启动类上的注解,提高配置内聚性。
分页插件顺序:若有多个插件(如动态表名、性能分析),分页插件应最后添加。
数据库类型DbType.MYSQL 会根据数据库方言自动优化分页 SQL。

3.封装分页参数 SysUserDTO

新建文件:src/main/java/com/ruoyi/common/core/domain/dto/SysUserDTO.java
创建 DTO 对象封装前端传入的分页参数,实现参数统一管理。

public class SysUserDTO {
    /** 当前记录起始索引 */
    private Integer pageNum;

    /** 每页显示记录数 */
    private Integer pageSize;
}

4.统一分页响应对象 TableDataInfo

新建文件:src/main/java/com/ruoyi/common/core/page/TableDataInfo.java
定义标准分页响应结构,提高接口规范性和前端处理效率。

/**
 * 分页查询统一响应对象
 * 作用:标准化分页接口返回结构
 */
public class TableDataInfo {
    /** 总记录数 */
    private long total;

    /** 列表数据 */
    private List<?> rows;

    /** 消息状态码 */
    private int code;

    /** 消息内容 */
    private String msg;
}

5. 改造 Controller 分页接口

在 Controller 层调用分页查询,并返回统一响应结构。

    @GetMapping("/list")
    public TableDataInfo list(SysUserDTO sysUserDTO)
    {
        Page<SysUser> page = new Page<>(sysUserDTO.getPageNum(), sysUserDTO.getPageSize());
        List<SysUser> list = sysUserService.list(page);

        TableDataInfo tableDataInfo = new TableDataInfo();
        tableDataInfo.setCode(200);
        tableDataInfo.setMsg("查询成功");
        tableDataInfo.setRows(list);
        tableDataInfo.setTotal(page.getTotal());
        return tableDataInfo;
    }

二.功能验证

运行项目,浏览器访问http://localhost:8080/system/user/list?pageNum=1&pageSize=10
在这里插入图片描述

三.知识点拓展

1、什么是POJO自动绑定?

POJO自动绑定是Spring框架提供的一种便捷功能,能够将HTTP请求中的参数(比如URL参数、表单数据)自动填充到一个普通的Java对象(POJO)中,而无需手动逐个获取参数。这种方式让代码更简洁,尤其适合处理多个参数的场景。


2、POJO自动绑定的使用场景

1. GET请求中的参数绑定

在GET请求中,参数通常以URL查询字符串的形式传递(如/user?name=张三&age=20)。Spring会自动将这些参数绑定到POJO对象。

示例代码:

// 1. 定义POJO类
public class User {
    private String name;
    private Integer age;
    // 必须有Setter方法或公有字段
    public void setName(String name) { this.name = name; }
    public void setAge(Integer age) { this.age = age; }
}

// 2. Controller方法
@GetMapping("/user")
public String getUser(User user) {
    System.out.println("用户名:" + user.getName());  // 输出"张三"
    System.out.println("年龄:" + user.getAge());    // 输出"20"
    return "success";
}
2. POST请求中的表单数据绑定

在POST请求中,如果前端以form-datax-www-form-urlencoded格式提交数据(比如HTML表单),Spring同样可以自动绑定到POJO对象。

示例代码:

<!-- 前端表单 -->
<form action="/register" method="post">
    <input type="text" name="name" value="李四">
    <input type="number" name="age" value="25">
    <button>提交</button>
</form>
// Controller方法
@PostMapping("/register")
public String register(User user) {
    System.out.println("注册用户:" + user.getName());  // 输出"李四"
    return "success";
}

3、POJO自动绑定的核心规则

1. 参数名与字段名必须匹配

Spring根据请求参数名和POJO字段名的匹配关系进行绑定。
例如:URL参数name=张三会自动填充到POJO的name字段。

2. 支持嵌套对象

如果参数名包含层级(如address.city),Spring会自动绑定到嵌套对象的字段。

示例:

// 定义嵌套对象的POJO
public class User {
    private String name;
    private Address address;  // 嵌套对象
}

public class Address {
    private String city;
}
// 请求参数示例:/user?name=王五&address.city=北京
// 自动绑定后:
user.getName() = "王五"
user.getAddress().getCity() = "北京"
3. POJO类需要Setter方法或公有字段

Spring通过反射为字段赋值,因此POJO类必须满足以下条件之一:
• 提供公有Setter方法(如setName())。
• 字段是公有的(不推荐,破坏封装性)。


4、POJO自动绑定只能在GET请求中使用吗?

不是! POJO自动绑定适用于所有HTTP方法(GET、POST、PUT等),只要参数传递方式符合以下两种情况:

  1. GET请求的URL参数
    例如:/user?name=张三

  2. POST请求的表单数据
    例如:HTML表单提交的form-datax-www-form-urlencoded数据。


5、POJO自动绑定的局限性

1. 无法直接绑定JSON请求体

如果前端发送的是JSON数据(如{"name": "张三", "age": 20}),需要使用@RequestBody注解,而不是POJO自动绑定。

正确做法:

@PostMapping("/create")
public String createUser(@RequestBody User user) {
    // 处理JSON数据
}
2. 不支持复杂类型转换

如果参数需要特殊转换(如字符串转日期),需结合@DateTimeFormat等注解实现。

示例:

public class User {
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
}

6、对比其他参数绑定方式

方式适用场景特点
@RequestParam获取单个简单参数需手动声明每个参数
@PathVariable获取URL路径中的参数/user/{id}
POJO自动绑定批量绑定多个参数到对象代码简洁,适合表单和URL参数
@RequestBody绑定JSON/XML请求体到对象需配合POST请求和JSON数据

7、总结

  1. POJO自动绑定的优势
    • 代码简洁,无需手动获取每个参数。
    • 天然支持嵌套对象和复杂结构。

  2. 适用场景
    • GET请求的URL参数。
    • POST请求的表单数据(form-datax-www-form-urlencoded)。

  3. 不适用场景
    • 接收JSON/XML请求体(需用@RequestBody)。
    • 需要复杂类型转换时(需额外注解辅助)。

一句话理解POJO自动绑定:
“把零散的参数打包成一个对象,让代码更干净!”

四.思考


http://www.kler.cn/a/596792.html

相关文章:

  • MySQL 事务(Transaction)详解
  • OSI通信模型
  • 搭建基于DNS主从架构、NFS共享存储及Nginx服务的完整环境
  • C++回顾 day1
  • 【Matlab笔记_22】Matlab地图矩阵左右置换
  • 阿里云国际站代理商:为什么边缘计算需要分布式防护?
  • 2025.3.22总结
  • DAY36贪心算法Ⅴ
  • linux内核数据结构分析之链表
  • 浅谈Qt事件子系统——以可拖动的通用Widget为例子
  • 腾讯 客户端实习 凉经(3)
  • LeetCode707设计链表
  • 四台电脑共享外设的终极方案:USB3.0 共享切换器 SV04 深度解析
  • PyCharm中使用pip安装PyTorch(从0开始仅需两步)
  • 连通图(并查集)
  • C# WebForm显示bootstrap模态对话框
  • 中颖SH366000介绍和使用全解
  • [01-04-02].第20节:PyQt5库初识及实现简易计算器
  • 数智读书笔记系列022《算力网络-云网融合2.0时代的网络架构与关键技术》读书笔记
  • css基础-浮动