🍀 前言
博客地址:
- CSDN:https://blog.csdn.net/powerbiubiu
👋 简介
本章节开始从实际的应用场景,来讲解Mybatis-Plus常用的一些操作,根据业务场景来进行增删改查的功能,首先先搭建一个项目。
📖 正文
1 搭建数据库
根据业务场景,设定了用户,角色,菜单三张表,同时还有用户与角色关联表,角色与菜单关联表,实现符合RBAC权限模型的一个项目基础架构
1.1 用户表
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户id',`username` varchar(20) NOT NULL DEFAULT '' COMMENT '用户名',`password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '密码',`name` varchar(50) DEFAULT NULL COMMENT '姓名',`email` varchar(50) DEFAULT NULL COMMENT 'email',`phone` varchar(11) DEFAULT NULL COMMENT '手机',`avatar` varchar(200) DEFAULT NULL COMMENT '头像地址',`sex` tinyint NOT NULL DEFAULT '2' COMMENT '性别(0:女 1:男 2:保密)',`description` varchar(255) DEFAULT NULL COMMENT '描述',`status` tinyint DEFAULT '1' COMMENT '状态(1:正常 0:停用)',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` tinyint NOT NULL DEFAULT '0' COMMENT '逻辑删除标记(0:可用 1:已删除)',PRIMARY KEY (`id`),UNIQUE KEY `idx_username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表';
1.2 角色表
DROP TABLE IF EXISTS `tb_role`;
CREATE TABLE `tb_role` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '角色id',`role_name` varchar(20) NOT NULL DEFAULT '' COMMENT '角色名称',`role_code` varchar(20) DEFAULT NULL COMMENT '角色编码',`description` varchar(255) DEFAULT NULL COMMENT '描述',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` tinyint NOT NULL DEFAULT '0' COMMENT '删除标记(0:可用 1:已删除)',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COMMENT='角色表';
1.3 菜单表
DROP TABLE IF EXISTS `tb_menu`;
CREATE TABLE `tb_menu` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',`parent_id` bigint NOT NULL DEFAULT '0' COMMENT '所属上级',`name` varchar(20) NOT NULL DEFAULT '' COMMENT '名称',`type` tinyint NOT NULL DEFAULT '0' COMMENT '类型(0:目录,1:菜单,2:按钮)',`path` varchar(100) DEFAULT NULL COMMENT '路由地址',`component` varchar(100) DEFAULT NULL COMMENT '组件路径',`perms` varchar(100) DEFAULT NULL COMMENT '权限标识',`icon` varchar(100) DEFAULT NULL COMMENT '图标',`sort_value` int DEFAULT NULL COMMENT '排序',`status` tinyint DEFAULT '1' COMMENT '状态(0:禁止,1:正常)',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` tinyint NOT NULL DEFAULT '0' COMMENT '删除标记(0:可用 1:已删除)',PRIMARY KEY (`id`),KEY `idx_parent_id` (`parent_id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='菜单表';
1.4 关联表
用户角色关联表
DROP TABLE IF EXISTS `tb_user_role`;
CREATE TABLE `tb_user_role` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id',`role_id` bigint NOT NULL DEFAULT '0' COMMENT '角色id',`user_id` bigint NOT NULL DEFAULT '0' COMMENT '用户id',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',PRIMARY KEY (`id`),KEY `idx_role_id` (`role_id`),KEY `idx_admin_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COMMENT='用户角色关联表';
角色菜单关联表
DROP TABLE IF EXISTS `tb_role_menu`;
CREATE TABLE `tb_role_menu` (`id` bigint NOT NULL AUTO_INCREMENT,`role_id` bigint NOT NULL DEFAULT '0',`menu_id` bigint NOT NULL DEFAULT '0',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',PRIMARY KEY (`id`),KEY `idx_role_id` (`role_id`),KEY `idx_menu_id` (`menu_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COMMENT='角色菜单表';
2 项目依赖
pom.xml
中使用到的依赖
<!--mysql-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>
<!--打印sql执行日志-->
<dependency><groupId>p6spy</groupId><artifactId>p6spy</artifactId><version>3.9.1</version>
</dependency>
<!--mybatis plus-->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version>
</dependency>
<!--mybatis plus代码生成器-->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.2</version>
</dependency>
<!--模板引擎(代码生成器使用)-->
<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version>
</dependency>
<!-- knife4j -->
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi2-spring-boot-starter</artifactId><version>4.3.0</version>
</dependency>
<!--lombok-->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>
3 添加配置
3.1 application.yml配置
server:port: 8080 # 项目运行端口,默认 8080
spring:datasource:# 指定数据库驱动类
# driver-class-name: com.mysql.cj.jdbc.Driverdriver-class-name: com.p6spy.engine.spy.P6SpyDriver# 数据库连接信息
# url: jdbc:mysql://localhost:3306/mpdemo?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8url: jdbc:p6spy:mysql://localhost:3306/mpdemo?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8username: rootpassword: 123456hikari: # 数据库连接池使用 Hikariminimum-idle: 5 # 连接池中最小空闲连接数maximum-pool-size: 20 # 连接池中允许的最大连接数auto-commit: true # 是否自动提交事务idle-timeout: 30000 # 连接在连接池中闲置的最长时间,超过这个时间会被释放。pool-name: MP-HikariCP # 自定义连接池的名字max-lifetime: 1800000 # 连接在连接池中的最大存活时间,超过这个时间会被强制关闭。connection-timeout: 30000 # 连接的超时时间connection-test-query: SELECT 1 # 用于测试连接是否可用的SQL查询
前面添加了p6spy
的依赖,所以这里数据库的驱动及url需要修改
备注:因为p6spy
影响性能,只在开发环境使用,如果项目上生产环境,尽量不要使用该方式
3.2 spy.properties配置
在项目resource目录下新建spy.properties
文件,对p6spy
进行配置
#3.2.1以上使用
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
#3.2.1以下使用或者不配置
#modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2
3.3 MapperScan扫描
在启动类上,通过MapperScan
注解对mapper进行扫描
/*** @author power* @time 2023/12/20 20:36:14* @Description*/
@SpringBootApplication
@MapperScan("com.power.mpdemo.mapper")
public class MpDemoApplication {public static void main(String[] args) {SpringApplication.run(MpDemoApplication.class, args);}
}
Tips :
@MapperScan 注解用于告诉 Mybatis-Plus 框架需要扫描的 mapper 类的包路径,mapper 类主要用于操作数据库。
✏ 总结
使用SpringBoot
和Mybatis-Plus
可以快速搭建稳健的后端项目,省去了大量繁琐的配置和代码编写,提高了开发效率。本系列文章通过结合实际的项目,深入理解Mybatis-Plus
框架的使用。