# vue-element-admin_and_springboot_project
**Repository Path**: yuzhoudaima/vue-element-admin_and_springboot_project
## Basic Information
- **Project Name**: vue-element-admin_and_springboot_project
- **Description**: vue-element-admin + springboot开发的权限管理项目
- **Primary Language**: Unknown
- **License**: GPL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 1
- **Created**: 2023-04-15
- **Last Updated**: 2025-05-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 效果








# 创建数据库和数据表
```sql
/*
SQLyog Ultimate v11.27 (32 bit)
MySQL - 8.0.26 : Database - db_authority_system
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`db_authority_system` /*!40100 DEFAULT CHARACTER SET utf8 */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `db_authority_system`;
/*Table structure for table `sys_department` */
DROP TABLE IF EXISTS `sys_department`;
CREATE TABLE `sys_department` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '部门编号',
`department_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '部门名称',
`phone` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '部门电话',
`address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '部门地址',
`pid` bigint NOT NULL COMMENT '所属部门编号',
`parent_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '所属部门名称',
`order_num` int DEFAULT NULL COMMENT '排序',
`is_delete` tinyint DEFAULT '0' COMMENT '是否删除(0-未删除 1-已删除)',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb3;
/*Data for the table `sys_department` */
insert into `sys_department`(`id`,`department_name`,`phone`,`address`,`pid`,`parent_name`,`order_num`,`is_delete`) values (1,'广州码农信息技术有限公司','020-8888888','广州市天河区',0,'顶级部门',0,0),(2,'软件技术部','020-88881001','广州市天河区',1,'广州码农信息技术有限公司',1,0),(3,'人事管理部','020-88881002','广州市天河区',1,'广州码农信息技术有限公司',1,0),(4,'市场管理部','020-88881003','广州市天河区',1,'广州码农信息技术有限公司',1,0),(5,'软件研发部','020-88881234','广州市天河区',1,'广州码农信息技术有限公司',2,0),(6,'Java技术部','020-12345678','广州市天河区',2,'软件技术部',NULL,1);
/*Table structure for table `sys_permission` */
DROP TABLE IF EXISTS `sys_permission`;
CREATE TABLE `sys_permission` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '权限编号',
`label` varchar(50) DEFAULT NULL COMMENT '权限名称',
`parent_id` bigint DEFAULT NULL COMMENT '父权限ID',
`parent_name` varchar(50) DEFAULT NULL COMMENT '父权限名称',
`code` varchar(50) DEFAULT NULL COMMENT '授权标识符',
`path` varchar(100) DEFAULT NULL COMMENT '路由地址',
`name` varchar(50) DEFAULT NULL COMMENT '路由名称',
`url` varchar(100) DEFAULT NULL COMMENT '授权路径',
`type` tinyint DEFAULT NULL COMMENT '权限类型(0-目录 1-菜单 2-按钮)',
`icon` varchar(50) DEFAULT NULL COMMENT '图标',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`order_num` int DEFAULT NULL COMMENT '排序',
`is_delete` tinyint DEFAULT '0' COMMENT '是否删除(0-未删除,1-已删除)',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8mb3;
/*Data for the table `sys_permission` */
insert into `sys_permission`(`id`,`label`,`parent_id`,`parent_name`,`code`,`path`,`name`,`url`,`type`,`icon`,`create_time`,`update_time`,`remark`,`order_num`,`is_delete`) values (1,'系统管理',0,'顶级菜单','sys:manager','/system','system','/system/system',0,'el-icon-menu','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,0,0),(2,'部门管理',1,'系统管理','sys:department','/department','department','/system/department/department',1,'el-icon-s-tools','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(3,'新增',2,'部门管理','sys:department:add',NULL,NULL,NULL,2,'el-icon-plus','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(4,'修改',2,'部门管理','sys:department:edit',NULL,NULL,NULL,2,'el-icon-edit','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(5,'删除',2,'部门管理','sys:department:delete',NULL,NULL,NULL,2,'el-icon-delete','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(6,'用户管理',1,'系统管理','sys:user','/userList','userList','/system/user/userList',1,'el-icon-s-custom','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(7,'新增',6,'用户管理','sys:user:add',NULL,NULL,NULL,2,'el-icon-plus','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(8,'修改',6,'用户管理','sys:user:edit',NULL,NULL,NULL,2,'el-icon-edit','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(9,'删除',6,'用户管理','sys:user:delete',NULL,NULL,NULL,2,'el-icon-delete','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(10,'角色管理',1,'系统管理','sys:role','/roleList','roleList','/system/role/roleList',1,'el-icon-s-tools','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(11,'新增',10,'角色管理','sys:role:add',NULL,NULL,NULL,2,'el-icon-plus','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(12,'修改',10,'角色管理','sys:role:edit',NULL,NULL,NULL,2,'el-icon-edit','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(13,'删除',10,'角色管理','sys:role:delete',NULL,NULL,NULL,2,'el-icon-delete','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(14,'菜单管理',1,'系统管理','sys:menu','/menuList','menuList','/system/menu/menuList',1,'el-icon-s-tools','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(15,'新增',14,'权限管理','sys:menu:add',NULL,NULL,NULL,2,'el-icon-plus','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(16,'修改',14,'权限管理','sys:menu:edit',NULL,NULL,NULL,2,'el-icon-edit','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(17,'删除',14,'权限管理','sys:menu:delete',NULL,NULL,NULL,2,'el-icon-delete','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(18,'资料管理',0,'顶级菜单','sys:resource','/resource','resource','/resource/index',0,'el-icon-menu','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,2,0),(19,'供应商管理',18,'资料管理','sys:provider','/providerList','providerList','/system/provider/providerList',1,'el-icon-s-tools','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,2,0),(20,'新增',19,'供应商管理','sys:provider:add',NULL,NULL,NULL,2,'el-icon-plus','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(21,'修改',19,'供应商管理','sys:provider:edit',NULL,NULL,NULL,2,'el-icon-edit','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(22,'删除',19,'供应商管理','sys:provider:delete',NULL,NULL,NULL,2,'el-icon-delete','2022-04-25 14:40:32','2022-04-25 14:40:32',NULL,NULL,0),(23,'分配角色',6,'用户管理','sys:user:assign','','','',2,'el-icon-setting',NULL,NULL,NULL,NULL,0),(24,'分配权限',10,'角色管理','sys:role:assign','','','',2,'el-icon-setting',NULL,NULL,NULL,NULL,0),(25,'查询',2,'部门管理','sys:department:select','','','',2,'el-icon-search',NULL,NULL,NULL,NULL,0),(26,'查询',6,'用户管理','sys:user:select','','','',2,'el-icon-search',NULL,NULL,NULL,NULL,0),(27,'查询',10,'角色管理','sys:role:select','','','',2,'el-icon-search',NULL,NULL,NULL,NULL,0),(28,'查询',14,'菜单管理','sys:menu:select','','','',2,'el-icon-search',NULL,NULL,NULL,NULL,0),(29,'订单管理',18,'资料管理','resource:order','/resource/order','OrderList','/resource/order/orderList',1,'el-icon-setting',NULL,NULL,NULL,2,0);
/*Table structure for table `sys_role` */
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '角色编号',
`role_code` varchar(50) NOT NULL COMMENT '角色编码',
`role_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '角色名称',
`create_user` bigint DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '备注',
`is_delete` tinyint DEFAULT '0' COMMENT '是否删除(0-未删除,1-已删除)',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3;
/*Data for the table `sys_role` */
insert into `sys_role`(`id`,`role_code`,`role_name`,`create_user`,`create_time`,`update_time`,`remark`,`is_delete`) values (1,'ROLE_SYSTEM','超级管理员',1,'2022-04-25 14:44:23','2022-04-25 14:44:23',NULL,0),(2,'ROLE_SYSTEM','系统管理员',1,'2022-04-25 14:44:23','2022-04-25 14:44:23','拥有系统管理功能模块的权限',0),(3,'ROLE_RESOURCE','资料管理员',NULL,NULL,NULL,'拥有资料管理模块的功能权限',0);
/*Table structure for table `sys_role_permission` */
DROP TABLE IF EXISTS `sys_role_permission`;
CREATE TABLE `sys_role_permission` (
`role_Id` bigint NOT NULL COMMENT '角色ID',
`permission_Id` bigint NOT NULL COMMENT '权限ID'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
/*Data for the table `sys_role_permission` */
insert into `sys_role_permission`(`role_Id`,`permission_Id`) values (1,1),(1,2),(1,3),(1,4),(1,5),(1,25),(1,6),(1,7),(1,8),(1,9),(1,23),(1,26),(1,10),(1,11),(1,12),(1,13),(1,24),(1,27),(1,14),(1,15),(1,16),(1,17),(1,28),(1,18),(1,19),(1,20),(1,21),(1,22),(2,1),(2,2),(2,3),(2,4),(2,5),(2,25),(2,6),(2,7),(2,8),(2,9),(2,23),(2,26),(2,10),(2,11),(2,12),(2,13),(2,24),(2,27),(2,14),(2,15),(2,16),(2,17),(2,28),(3,18),(3,19),(3,20),(3,21),(3,22),(3,29);
/*Table structure for table `sys_user` */
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户编号',
`username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '登录名称(用户名)',
`password` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '登录密码',
`is_account_non_expired` tinyint NOT NULL COMMENT '帐户是否过期(1-未过期,0-已过期)',
`is_account_non_locked` tinyint NOT NULL COMMENT '帐户是否被锁定(1-未过期,0-已过期)',
`is_credentials_non_expired` tinyint NOT NULL COMMENT '密码是否过期(1-未过期,0-已过期)',
`is_enabled` tinyint NOT NULL COMMENT '帐户是否可用(1-可用,0-禁用)',
`real_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '真实姓名',
`nick_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '昵称',
`department_id` bigint DEFAULT NULL COMMENT '所属部门ID',
`department_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '所属部门名称',
`gender` tinyint NOT NULL COMMENT '性别(0-男,1-女)',
`phone` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '电话',
`email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '邮箱',
`avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT 'https://manong-authority.oss-cn-guangzhou.aliyuncs.com/avatar/default-avatar.gif' COMMENT '用户头像',
`is_admin` tinyint DEFAULT '0' COMMENT '是否是管理员(1-管理员)',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`is_delete` tinyint DEFAULT '0' COMMENT '是否删除(0-未删除,1-已删除)',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb3;
/*Data for the table `sys_user` */
insert into `sys_user`(`id`,`username`,`password`,`is_account_non_expired`,`is_account_non_locked`,`is_credentials_non_expired`,`is_enabled`,`real_name`,`nick_name`,`department_id`,`department_name`,`gender`,`phone`,`email`,`avatar`,`is_admin`,`create_time`,`update_time`,`is_delete`) values (1,'admin','$2a$10$TdEVQtGCkpo8L.jKjFB3/uxV5xkkDfiy0zoCa.ZS2yAXHe7H95OIC',1,1,1,1,'李明','超级管理员',1,'广州码农信息技术有限公司',0,'13242587415','liming@163.com','https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',1,NULL,NULL,0),(2,'liming','$2a$10$WwhJ8dBezfyMFIn19.ELru58K65k6N2tgewtv2sWdClKiRCjC55wG',1,1,1,1,'黎明','黎明',2,'软件技术部',0,'13262365412578','','https://manong-authority.oss-cn-guangzhou.aliyuncs.com/avatar/default-avatar.gif',0,NULL,NULL,0),(3,'zhangsan','$2a$10$iBQbmrAEBE5B84/U3RY7c.zhObI4aIpjl807FV4LzL/uay7arIcpu',1,1,1,1,'张三','张三',2,'软件技术部',0,'13245678965','zhangsan@163.com','https://manong-authority.oss-cn-guangzhou.aliyuncs.com/avatar/2022/05/16/bfa834a4c9424461a1ea0cbf8d4c9105-5acd2ed959790ec52b2825cbbc11b72d.jpeg',0,NULL,NULL,1),(4,'lisi','$2a$10$QywHvELdRoFGiU6LKpd/X.LYpfaXETtS0pD4Nem2K3c0iMQwaZuAm',1,1,1,1,'李四','李四',2,'软件技术部',0,'13754214568','','https://manong-authority.oss-cn-guangzhou.aliyuncs.com/avatar/2022/05/16/8868a2bfb4364e0697f7c3d28f3d889a-5acd2ed959790ec52b2825cbbc11b72d.jpeg',0,NULL,NULL,0),(5,'wangwu','$2a$10$O8uyPZFS9PLfR8JN.aMRi.l/YeykYYuKH.cg/HBAR.N4NJeNg8hQK',1,1,1,1,'王五','王五',2,'软件技术部',0,'13212345678','','https://manong-authority.oss-cn-guangzhou.aliyuncs.com/avatar/2022/05/16/fe664c1e45bb4e39a719cd3f6d95232a-male.jpg',0,NULL,NULL,0),(6,'zhaoliu','$2a$10$r45wkEYLHlteEr0KLI8y3.G506ylhQrEJkmGM.i2eHkcCnFvfbhCS',1,1,1,1,'赵六','赵六',2,'软件技术部',0,'13212345676','','https://manong-authority.oss-cn-guangzhou.aliyuncs.com/avatar/2022/05/16/8868a2bfb4364e0697f7c3d28f3d889a-5acd2ed959790ec52b2825cbbc11b72d.jpeg',0,NULL,NULL,0);
/*Table structure for table `sys_user_role` */
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role` (
`user_id` bigint NOT NULL COMMENT '用户编号',
`role_id` bigint NOT NULL COMMENT '角色编号'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
/*Data for the table `sys_user_role` */
insert into `sys_user_role`(`user_id`,`role_id`) values (1,1),(2,2),(4,2),(6,3),(5,3);
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
```
# 初始化springboot项目
## 创建maven项目
+ 创建springboot项目,使用`Custom: https://start.aliyun.com/`
+ 防止一些傻逼情况,创建项目没`pom.xml`,创建项目时先选择`web`和`lombok`两个依赖(随便选两个)
+ 项目名为`vue-element-admin_and_springboot_project`
## 安装依赖
```xml
4.0.0
com.zhang
code
0.0.1
code
vue-element-admin_and_springboot_security_project
1.8
UTF-8
UTF-8
2.6.13
0.9.1
3.5.1
1.2.80
org.springframework.boot
spring-boot-starter-web
mysql
mysql-connector-java
runtime
com.baomidou
mybatis-plus-boot-starter
${mybatis-plus.version}
org.springframework.boot
spring-boot-devtools
runtime
true
org.springframework.boot
spring-boot-starter-test
test
com.alibaba
fastjson
${fastjson.version}
io.jsonwebtoken
jjwt
${jwt.version}
org.springframework.boot
spring-boot-starter-data-redis
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
1.8
1.8
UTF-8
org.springframework.boot
spring-boot-maven-plugin
${spring-boot.version}
com.zhang.code.CodeApplication
true
repackage
repackage
```
## 编写配置文件
```properties
# 设置端口号
server.port=9999
# 数据库驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/db_authority_system?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
# 数据库用户名
spring.datasource.username=root
# 数据库密码
spring.datasource.password=123456
# 加载映射文件
mybatis-plus.mapper-locations=classpath*:/mapper/**/*.xml
# 设置别名
mybatis-plus.type-aliases-package=com.zhang.code.entity
# 关闭驼峰命名映射
# mybatis-plus.configuration.map-underscore-to-camel-case=false
# 显示日志
logging.level.com.manong.dao=debug
#JSON 日期格式化
spring.jackson.date-format=yyyy-MM-dd
#JSON 日期格式化设置时区为上海
spring.jackson.time-zone=Asia/Shanghai
# 日期格式化
spring.mvc.format.date=yyyy-MM-dd
spring.mvc.format.date-time=yyyy-MM-ddHH:mm:ss
```
## 代码生成器
+ 代码生成器主文件
```java
package com.zhang.utils;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
public class GeneratorCode {
private static String author ="zhang";//作者名称
private static String outputDir ="D:\\";//生成的位置
private static String driver ="com.mysql.cj.jdbc.Driver";//驱动,注意版本
//连接路径,注意修改数据库名称
private static String url ="jdbc:mysql://localhost:3306/db_authority_system?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
private static String username ="root";//数据库用户名
private static String password ="123456";//数据库密码
private static String tablePrefix ="sys_";//数据库表的前缀,如t_user
private static String [] tables = {"sys_user","sys_role","sys_permission","sys_department"}; //生成的表
private static String parentPackage = "com.zhang.code";//顶级包结构
private static String dao = "dao";//数据访问层包名称
private static String service = "service";//业务逻辑层包名称
private static String entity = "entity";//实体层包名称
private static String controller = "controller";//控制器层包名称
private static String mapperxml = "mapper";//mapper映射文件包名称
public static void main(String[] args) {
//1. 全局配置
GlobalConfig config = new GlobalConfig();
config.setAuthor(author) // 作者
.setOutputDir(outputDir) // 生成路径
.setFileOverride(true) // 文件覆盖
.setIdType(IdType.AUTO) // 主键策略
.setServiceName("%sService") // 设置生成的service接口的名字的首字母是否为I,加%s则不生成I
.setBaseResultMap(true) //映射文件中是否生成ResultMap配置
.setBaseColumnList(true); //生成通用sql字段
//2. 数据源配置
DataSourceConfig dsConfig = new DataSourceConfig();
dsConfig.setDbType(DbType.MYSQL) // 设置数据库类型
.setDriverName(driver) //设置驱动
.setUrl(url) //设置连接路径
.setUsername(username) //设置用户名
.setPassword(password); //设置密码
//3. 策略配置
StrategyConfig stConfig = new StrategyConfig();
stConfig.setCapitalMode(true) //全局大写命名
.setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略
.setTablePrefix(tablePrefix) //表前缀
.setInclude(tables) // 生成的表
.setEntityLombokModel(true);//支持Lombok
//4. 包名策略配置
PackageConfig pkConfig = new PackageConfig();
pkConfig.setParent(parentPackage)//顶级包结构
.setMapper(dao) //数据访问层
.setService(service) //业务逻辑层
.setController(controller) //控制器
.setEntity(entity) //实体类
.setXml(mapperxml); //mapper映射文件
//5. 整合配置
AutoGenerator ag = new AutoGenerator();
ag.setGlobalConfig(config)
.setDataSource(dsConfig)
.setStrategy(stConfig)
.setPackageInfo(pkConfig);
//6. 执行
ag.execute();
}
}
```
+ 需要将它放到`maven`项目中
+ maven项目依赖
```xml
4.0.0
com.manong
code-generator
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-parent
2.6.5
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
mysql
mysql-connector-java
com.baomidou
mybatis-plus-boot-starter
3.4.1
org.projectlombok
lombok
true
com.baomidou
mybatis-plus-generator
3.4.1
org.apache.velocity
velocity-engine-core
2.0
org.slf4j
slf4j-api
org.slf4j
slf4j-log4j12
```
+ 安装依赖后,运行上面的Java文件
+ 就会在指定目录生成代码包
+ 将除`mapper`目录之外的所有目录都复制到和springboot启动类同级目录中
+ 将`mapper`目录复制到`resource`下
**注意:将实体类中属性数据类型为LocalDate和LocalDateTime修改成java.util.Date类型。**
**User类需要继承UserDetails,后续要用到权限认证之类**
```java
public class User implements Serializable, UserDetails {}
```
+ 这些字段人家要的都是`boolean`类型
```java
/**
* 帐户是否过期(1-未过期,0-已过期)
*/
private boolean isAccountNonExpired = true;
/**
* 帐户是否被锁定(1-未过期,0-已过期)
*/
private boolean isAccountNonLocked = true;
/**
* 密码是否过期(1-未过期,0-已过期)
*/
private boolean isCredentialsNonExpired = true;
/**
* 帐户是否可用(1-可用,0-禁用)
*/
private boolean isEnabled = true;
```
+ 将`service/impl`下所有实现类都加上`@Transactional`注解
### 修改后的全部代码
#### entity
> + User.java
>
> ```java
> package com.zhang.code.entity;
>
> import com.baomidou.mybatisplus.annotation.TableField;
> import com.baomidou.mybatisplus.annotation.TableName;
> import com.baomidou.mybatisplus.annotation.IdType;
> import com.baomidou.mybatisplus.annotation.TableId;
>
> import java.util.Collection;
> import java.util.Date;
> import java.io.Serializable;
> import java.util.List;
>
> import lombok.Data;
> import org.springframework.security.core.GrantedAuthority;
> import org.springframework.security.core.userdetails.UserDetails;
>
> @Data
> @TableName("sys_user")
> public class User implements Serializable, UserDetails {
>
> private static final long serialVersionUID = 1L;
>
> /**
> * 用户编号
> */
> @TableId(value = "id", type = IdType.AUTO)
> private Long id;
>
> /**
> * 登录名称(用户名)
> */
> private String username;
>
> /**
> * 登录密码
> */
> private String password;
>
> /**
> * 帐户是否过期(1-未过期,0-已过期)
> */
> private boolean isAccountNonExpired = true;
>
> /**
> * 帐户是否被锁定(1-未过期,0-已过期)
> */
> private boolean isAccountNonLocked = true;
>
> /**
> * 密码是否过期(1-未过期,0-已过期)
> */
> private boolean isCredentialsNonExpired = true;
>
> /**
> * 帐户是否可用(1-可用,0-禁用)
> */
> private boolean isEnabled = true;
>
> /**
> * 真实姓名
> */
> private String realName;
>
> /**
> * 昵称
> */
> private String nickName;
>
> /**
> * 所属部门ID
> */
> private Long departmentId;
>
> /**
> * 所属部门名称
> */
> private String departmentName;
>
> /**
> * 性别(0-男,1-女)
> */
> private Integer gender;
>
> /**
> * 电话
> */
> private String phone;
>
> /**
> * 邮箱
> */
> private String email;
>
> /**
> * 用户头像
> */
> private String avatar;
>
> /**
> * 是否是管理员(1-管理员)
> */
> private Integer isAdmin;
>
> /**
> * 创建时间
> */
> private Date createTime;
>
> /**
> * 修改时间
> */
> private Date updateTime;
>
> /**
> * 是否删除(0-未删除,1-已删除)
> */
> private Integer isDelete;
>
> /**
> * 权限列表
> */
> @TableField(exist = false)
> Collection extends GrantedAuthority> authorities;
> /**
> * 查询用户权限列表
> */
> @TableField(exist = false)
> private List permissionList;
>
> }
> ```
>
> + `Role.java`
>
> ```java
> package com.zhang.code.entity;
>
> import com.baomidou.mybatisplus.annotation.TableName;
> import com.baomidou.mybatisplus.annotation.IdType;
> import com.baomidou.mybatisplus.annotation.TableId;
> import java.util.Date;
> import java.io.Serializable;
> import lombok.Data;
>
> @Data
> @TableName("sys_role")
> public class Role implements Serializable {
>
> private static final long serialVersionUID = 1L;
>
> /**
> * 角色编号
> */
> @TableId(value = "id", type = IdType.AUTO)
> private Long id;
>
> /**
> * 角色编码
> */
> private String roleCode;
>
> /**
> * 角色名称
> */
> private String roleName;
>
> /**
> * 创建人
> */
> private Long createUser;
>
> /**
> * 创建时间
> */
> private Date createTime;
>
> /**
> * 修改时间
> */
> private Date updateTime;
>
> /**
> * 备注
> */
> private String remark;
>
> /**
> * 是否删除(0-未删除,1-已删除)
> */
> private Integer isDelete;
> ```
>
>
> }
>
> ```
> + `Permission.java`
>
> ```java
> package com.zhang.code.entity;
>
> import com.baomidou.mybatisplus.annotation.TableName;
> import com.baomidou.mybatisplus.annotation.IdType;
> import com.baomidou.mybatisplus.annotation.TableId;
> import java.util.Date;
> import java.io.Serializable;
> import lombok.Data;
>
> @Data
> @TableName("sys_permission")
> public class Permission implements Serializable {
>
> private static final long serialVersionUID = 1L;
>
> /**
> * 权限编号
> */
> @TableId(value = "id", type = IdType.AUTO)
> private Long id;
>
> /**
> * 权限名称
> */
> private String label;
>
> /**
> * 父权限ID
> */
> private Long parentId;
>
> /**
> * 父权限名称
> */
> private String parentName;
>
> /**
> * 授权标识符
> */
> private String code;
>
> /**
> * 路由地址
> */
> private String path;
>
> /**
> * 路由名称
> */
> private String name;
>
> /**
> * 授权路径
> */
> private String url;
>
> /**
> * 权限类型(0-目录 1-菜单 2-按钮)
> */
> private Integer type;
>
> /**
> * 图标
> */
> private String icon;
>
> /**
> * 创建时间
> */
> private Date createTime;
>
> /**
> * 修改时间
> */
> private Date updateTime;
>
> /**
> * 备注
> */
> private String remark;
>
> /**
> * 排序
> */
> private Integer orderNum;
>
> /**
> * 是否删除(0-未删除,1-已删除)
> */
> private Integer isDelete;
>
>
> }
> ```
>
> + `Department.java`
>
> ```java
> package com.zhang.code.entity;
>
> import com.baomidou.mybatisplus.annotation.TableName;
> import com.baomidou.mybatisplus.annotation.IdType;
> import com.baomidou.mybatisplus.annotation.TableId;
> import java.io.Serializable;
> import lombok.Data;
> import lombok.EqualsAndHashCode;
>
> /**
> *
> *
> *
> *
> * @author zhang
> * @since 2023-04-15
> */
> @Data
> @TableName("sys_department")
> public class Department implements Serializable {
>
> private static final long serialVersionUID = 1L;
>
> /**
> * 部门编号
> */
> @TableId(value = "id", type = IdType.AUTO)
> private Long id;
>
> /**
> * 部门名称
> */
> private String departmentName;
>
> /**
> * 部门电话
> */
> private String phone;
>
> /**
> * 部门地址
> */
> private String address;
>
> /**
> * 所属部门编号
> */
> private Long pid;
>
> /**
> * 所属部门名称
> */
> private String parentName;
>
> /**
> * 排序
> */
> private Integer orderNum;
>
> /**
> * 是否删除(0-未删除 1-已删除)
> */
> private Integer isDelete;
> ```
>
>
> }
>
> ```
>
> ```
#### dao
> + UserMapper.java
>
> ```java
> package com.zhang.code.dao;
>
> import com.zhang.code.entity.User;
> import com.baomidou.mybatisplus.core.mapper.BaseMapper;
>
> public interface UserMapper extends BaseMapper {
>
> }
>
> ```
>
> + RoleMapper.java
>
> ```java
> package com.zhang.code.dao;
>
> import com.zhang.code.entity.Role;
> import com.baomidou.mybatisplus.core.mapper.BaseMapper;
>
> public interface RoleMapper extends BaseMapper {
>
> }
> ```
>
> + DepartmentMapper.java
>
> ```java
> package com.zhang.code.dao;
>
> import com.zhang.code.entity.Department;
> import com.baomidou.mybatisplus.core.mapper.BaseMapper;
>
> public interface DepartmentMapper extends BaseMapper {
>
> }
> ```
>
> + PermissionMapper.java
>
> ```java
> package com.zhang.code.dao;
>
> import com.zhang.code.entity.Permission;
> import com.baomidou.mybatisplus.core.mapper.BaseMapper;
>
> public interface PermissionMapper extends BaseMapper {
>
> }
> ```
#### service
> + UserService.java
>
> ```java
> package com.zhang.code.service;
>
> import com.zhang.code.entity.User;
> import com.baomidou.mybatisplus.extension.service.IService;
>
> public interface UserService extends IService {
>
> }
> ```
>
> + PermissionService.java
>
> ```java
> package com.zhang.code.service;
>
> import com.zhang.code.entity.Permission;
> import com.baomidou.mybatisplus.extension.service.IService;
> ```
>
>
> public interface PermissionService extends IService {
>
> }
>
> ```
> + DepartmentService.java
>
> ````java
> package com.zhang.code.service;
>
> import com.zhang.code.entity.Department;
> import com.baomidou.mybatisplus.extension.service.IService;
>
>
> public interface DepartmentService extends IService {
>
> }
> ````
>
> + RoleService.java
>
> ```java
> package com.zhang.code.service;
>
> import com.zhang.code.entity.Role;
> import com.baomidou.mybatisplus.extension.service.IService;
>
> public interface RoleService extends IService {
>
> }
> ```
##### impl
> + DepartmentServiceImpl.java
>
> ```java
> package com.zhang.code.service.impl;
>
> import com.zhang.code.entity.Department;
> import com.zhang.code.dao.DepartmentMapper;
> import com.zhang.code.service.DepartmentService;
> import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
> import org.springframework.stereotype.Service;
> import org.springframework.transaction.annotation.Transactional;
> ```
>
>
> @Service
> @Transactional
> public class DepartmentServiceImpl extends ServiceImpl implements DepartmentService {
>
> }
>
> ```
> + PermissionServiceImpl.java
>
> ```java
> package com.zhang.code.service.impl;
>
> import com.zhang.code.entity.Permission;
> import com.zhang.code.dao.PermissionMapper;
> import com.zhang.code.service.PermissionService;
> import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
> import org.springframework.stereotype.Service;
>
>
> @Service
> public class PermissionServiceImpl extends ServiceImpl implements PermissionService {
>
> }
> ```
>
> + RoleServiceImpl.java
>
> ```java
> package com.zhang.code.service.impl;
>
> import com.zhang.code.entity.Role;
> import com.zhang.code.dao.RoleMapper;
> import com.zhang.code.service.RoleService;
> import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
> import org.springframework.stereotype.Service;
> import org.springframework.transaction.annotation.Transactional;
> ```
>
>
> @Service
> @Transactional
> public class RoleServiceImpl extends ServiceImpl implements RoleService {
>
> }
>
> ```
> + UserServiceImpl.java
>
> ```java
> package com.zhang.code.service.impl;
>
> import com.zhang.code.entity.User;
> import com.zhang.code.dao.UserMapper;
> import com.zhang.code.service.UserService;
> import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
> import org.springframework.stereotype.Service;
>
> @Service
> public class UserServiceImpl extends ServiceImpl implements UserService {
>
> }
> ```
#### controller
> + DepartmentController.java
>
> ```java
> package com.zhang.code.controller;
> ```
>
>
> import org.springframework.web.bind.annotation.RequestMapping;
>
> import org.springframework.stereotype.Controller;
>
> @Controller
> @RequestMapping("/department")
> public class DepartmentController {
>
> }
>
> ```
> + PermissionController.java
>
> ```java
> package com.zhang.code.controller;
>
>
> import org.springframework.web.bind.annotation.RequestMapping;
>
> import org.springframework.stereotype.Controller;
>
> @Controller
> @RequestMapping("/permission")
> public class PermissionController {
>
> }
> ```
>
> + RoleController.java
>
> ```java
> package com.zhang.code.controller;
> ```
>
>
> import org.springframework.web.bind.annotation.RequestMapping;
>
> import org.springframework.stereotype.Controller;
>
> @Controller
> @RequestMapping("/role")
> public class RoleController {
>
> }
>
> ```
> + UserController.java
>
> ```java
> package com.zhang.code.controller;
>
>
> import org.springframework.web.bind.annotation.RequestMapping;
>
> import org.springframework.stereotype.Controller;
>
> @Controller
> @RequestMapping("/user")
> public class UserController {
>
> }
> ```
#### mapper
> + DepartmentMapper.xml
>
> ```xml
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> id, department_name, phone, address, pid, parent_name, order_num, is_delete
>
>
>
> ```
>
> + PermissionMapper.xml
>
> ```xml
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> id, label, parent_id, parent_name, code, path, name, url, type, icon, create_time, update_time, remark, order_num, is_delete
>
>
>
> ```
>
> + RoleMapper.xml
>
> ```xml
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> id, role_code, role_name, create_user, create_time, update_time, remark, is_delete
>
>
>
> ```
>
> + UserMapper.xml
>
> ```xml
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> id, username, password, is_account_non_expired, is_account_non_locked, is_credentials_non_expired, is_enabled, real_name, nick_name, department_id, department_name, gender, phone, email, avatar, is_admin, create_time, update_time, is_delete
>
>
>
> ```
---
## 封装统一返回结果类型
+ `com.zhang.code.utils.ResultCode.java`
```java
package com.zhang.code.utils;
public class ResultCode {
/**
* 成功状态码
*/
public static Integer SUCCESS = 200;
/**
* 失败状态码
*/
public static Integer ERROR = 500;
/**
*
未登录状态码
*/
public static final int NO_LOGIN = 600;
/**
*
没有权限状态码
*/
public static final int NO_AUTH = 700;
}
```
+ `com.zhang.code.utils.Result.java`
```java
package com.zhang.code.utils;
import
lombok.Data;
/**
* 全局统一返回结果类
*/
@Data
public class Result {
private Boolean success;//是否成功
private Integer code;//状态码
private String message;//返回消息
private T data;//返回数据
/**
* 私有化构造方法,
* 禁止在其它类创建对象
*/
private Result() {
}
/**
* 成功执行,
* 不返回数据
*
* @return
*/
public static Result ok() {
Result result = new Result();
result.setSuccess(true);
result.setCode(ResultCode.SUCCESS);
result.setMessage("执行成功" );
return result;
}
/**
* 成功执行,
* 并返回数据
*
* @param data
* @param
* @return
*/
public static Result ok(T data) {
Result result = new Result();
result.setSuccess(true);
result.setCode(ResultCode.SUCCESS);
result.setMessage("执行成功" );
result.setData(data);
return result;
}
/**
* 失败
*
* @return
*/
public static Result error() {
Result result = new Result();
result.setSuccess(false);
result.setCode(ResultCode.ERROR);
result.setMessage("执行失败" );
return result;
}
/**
* 设置是否成功
*
* @param success
* @return
*/
public Result success(Boolean success) {
this.setSuccess(success);
return this;
}
/**
* 设置状态码
*
* @param code
* @return
*/
public Result code(Integer code) {
this.setCode(code);
return this;
}
/**
* 设置返回消息
*
* @param message
* @return
*/
public Result message(String message) {
this.setMessage(message);
return this;
}
/**
* 是否存在
*
* @return
*/
public static Result exist() {
Result result = new Result();
result.setSuccess(true);
result.setCode(ResultCode.SUCCESS);
result.setMessage("执行成功" );
return result;
}
}
```
+ 在`UserController.java`中测试是否能使用
```java
package com.zhang.code.controller;
import com.zhang.code.service.UserService;
import com.zhang.code.utils.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("/api/user")
public class UserController {
@Resource
private UserService userService;
/**
* 查询所有用户信息(测试使用)
* @Return
*/
@GetMapping("/list")
public Result list(){
return Result.ok(userService.list());
}
}
```
+ `application.properties`中需要配置
```properties
# 加载映射文件
mybatis-plus.mapper-locations=classpath*:/mapper/*.xml
```
+ 在启动类上添加`@MapperScan`扫描mapper类
```java
package com.zhang.code;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.zhang.code.dao")
@SpringBootApplication
public class CodeApplication {
public static void main(String[] args) {
SpringApplication.run(CodeApplication.class, args);
}
}
```
---