功能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 插件* 注意:若需多个插件,分页插件需最后添加(避免分页计数错误)*/@Beanpublic 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-data
或x-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等),只要参数传递方式符合以下两种情况:
-
GET请求的URL参数
例如:/user?name=张三
-
POST请求的表单数据
例如:HTML表单提交的form-data
或x-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、总结
-
POJO自动绑定的优势
• 代码简洁,无需手动获取每个参数。
• 天然支持嵌套对象和复杂结构。 -
适用场景
• GET请求的URL参数。
• POST请求的表单数据(form-data
或x-www-form-urlencoded
)。 -
不适用场景
• 接收JSON/XML请求体(需用@RequestBody
)。
• 需要复杂类型转换时(需额外注解辅助)。
一句话理解POJO自动绑定:
“把零散的参数打包成一个对象,让代码更干净!”