MyBatis-Plus 自动构建项目_V3

简介

采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用(比 Mybatis 官方的 Generator 更加强大!)

下面代码直接从项目中提取

脚本初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
-- ----------------------------
-- 1、用户表
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`user_name` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(50) NOT NULL COMMENT '密码',
`email` varchar(20) NOT NULL COMMENT '邮箱',
`state` char(1) DEFAULT '0' COMMENT '用户状态:正常:0, 锁定:1',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标识:正常:0, 删除:1',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间',
`remark` varchar(100) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`user_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '用户表';

-- ----------------------------
-- 初始化-用户表数据
-- ----------------------------
INSERT INTO `sys_user`(`user_id`,`user_name`,`password`,`email`,`state`,`del_flag`,`remark`) VALUES (null,'admin','admin','admin@qq.com','0','0','管理员');
INSERT INTO `sys_user`(`user_id`,`user_name`,`password`,`email`,`state`,`del_flag`,`remark`) VALUES (null,'ray','123456','ray@qq.com','0','0','普通用户');


-- ----------------------------
-- 2、角色表
-- ----------------------------
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role`(
`role_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '角色ID',
`role_name` varchar(50) NOT NULL COMMENT '角色表示,如admin、user',
`description` varchar(50) NOT NULL COMMENT '角色描述,如管理员,用户',
`available` char(1) DEFAULT '0' COMMENT '是否可用:正常:0, 禁用:1',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`role_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '角色表';

-- ----------------------------
-- 初始化-角色表数据
-- ----------------------------
INSERT INTO `sys_role`(`role_id`,`role_name`,`description`,`available`) VALUES (null, 'admin','管理员','0');
INSERT INTO `sys_role`(`role_id`,`role_name`,`description`,`available`) VALUES (null, 'vip','VIP会员','0');
INSERT INTO `sys_role`(`role_id`,`role_name`,`description`,`available`) VALUES (null, 'user','普通用户','0');


-- ----------------------------
-- 3、用户角色关联表
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role`(
`u_id` int(11) NOT NULL COMMENT '用户ID',
`r_id` int(11) NOT NULL COMMENT '角色ID',
PRIMARY KEY(`u_id`,`r_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '用户角色关联表';

-- ----------------------------
-- 初始化-用户角色关联表
-- ----------------------------
INSERT INTO `sys_user_role`(`u_id`,`r_id`) VALUES (1,1);
INSERT INTO `sys_user_role`(`u_id`,`r_id`) VALUES (2,3);



-- ----------------------------
-- 4、权限表
-- ----------------------------
DROP TABLE IF EXISTS `sys_permission`;
CREATE TABLE `sys_permission`(
`permission_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '权限ID',
`permission_name` varchar(50) NOT NULL COMMENT '权限名称,如添加用户',
`permission` varchar(50) NOT NULL COMMENT '权限字符串,如sysUser:view',
`resource_type` varchar(50) NOT NULL COMMENT '资源类型,如menu、button',
`url` varchar(50) NOT NULL COMMENT '资源路径,如/sysUser/list',
`available` char(1) DEFAULT '0' COMMENT '是否可用:正常:0, 禁用:1',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`permission_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '权限表';

-- ----------------------------
-- 初始化-权限表
-- ----------------------------
INSERT INTO `sys_permission`(`permission_id`,`permission_name`,`permission`,`resource_type`,`url`,`available`) VALUES (null,'用户查询','sysUser:list','button','sysUser/list','0');
INSERT INTO `sys_permission`(`permission_id`,`permission_name`,`permission`,`resource_type`,`url`,`available`) VALUES (null,'用户添加','sysUser:add','button','sysUser/add','0');
INSERT INTO `sys_permission`(`permission_id`,`permission_name`,`permission`,`resource_type`,`url`,`available`) VALUES (null,'用户修改','sysUser:edit','button','sysUser/edit','0');
INSERT INTO `sys_permission`(`permission_id`,`permission_name`,`permission`,`resource_type`,`url`,`available`) VALUES (null,'用户删除','sysUser:del','button','sysUser/del','0');


-- ----------------------------
-- 5、角色权限关联表
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_permission`;
CREATE TABLE `sys_role_permission`(
`r_id` int(11) NOT NULL COMMENT '角色ID',
`p_id` int(11) NOT NULL COMMENT '权限ID',
PRIMARY KEY(`r_id`,`p_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '角色权限关联表';

-- ----------------------------
-- 初始化-角色权限关联表
-- ----------------------------
INSERT INTO `sys_role_permission`(`r_id`,`p_id`) VALUES (1,1);
INSERT INTO `sys_role_permission`(`r_id`,`p_id`) VALUES (1,2);
INSERT INTO `sys_role_permission`(`r_id`,`p_id`) VALUES (1,3);
INSERT INTO `sys_role_permission`(`r_id`,`p_id`) VALUES (1,4);
INSERT INTO `sys_role_permission`(`r_id`,`p_id`) VALUES (3,1);


-- ----------------------------
-- 6、邮件表
-- ----------------------------
DROP TABLE IF EXISTS `sys_email`;
CREATE TABLE `sys_email`(
`email_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '邮件ID',
`email_name` varchar(50) COMMENT '收件人',
`code` int(11) COMMENT '验证码',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`email_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '邮件表';


-- ----------------------------
-- 7、操作日志表
-- ----------------------------
DROP TABLE IF EXISTS `sys_operation_log`;
CREATE TABLE `sys_operation_log`(
`log_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
`client_ip` varchar(50) COMMENT '客户端请求IP',
`uri` varchar(50) COMMENT '客户端请求URI',
`method` varchar(50) COMMENT '请求方法',
`param_data` longtext COMMENT '请求参数内容',
`return_data` longtext COMMENT '接口返回数据',
`session_id` varchar(50) COMMENT 'SESSION 标识',
`http_status_code` varchar(10) COMMENT '请求状态码,如200,404',
`time_consuming` int(8) COMMENT '请求耗时(毫秒)',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`log_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '操作日志表';


-- ----------------------------
-- 8、登录日志表
-- ----------------------------
DROP TABLE IF EXISTS `sys_login_log`;
CREATE TABLE `sys_login_log`(
`log_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
`client_ip` varchar(50) COMMENT '客户端请求IP',
`uri` varchar(50) COMMENT '客户端请求URI',
`method` varchar(50) COMMENT '请求方法',
`param_data` longtext COMMENT '请求参数内容',
`return_data` longtext COMMENT '接口返回数据',
`session_id` varchar(50) COMMENT 'SESSION 标识',
`http_status_code` varchar(10) COMMENT '请求状态码,如200,404',
`time_consuming` int(8) COMMENT '请求耗时(毫秒)',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`log_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '登录日志表';

添加依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>

<mybatis-plus.version>3.0.6</mybatis-plus.version>
<velocity.version>1.7</velocity.version>
</properties>

<dependencies>
<!-- SpringBoot Web容器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- Mybatis-plus 持久层框架 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>

<!--velocity代码生成使用模板 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>${velocity.version}</version>
</dependency>

<!--Mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>

<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>

<!-- 测试单元 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

构建项目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package com.ray.generator;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
* @author Ray
* @date 2018/11/19 0019
* 代码生成器
*/
public class MysqlGenerator {

/**
* 1. JDBC 相关配置
*/
private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost:3306/ray_v1?characterEncoding=utf8&serverTimezone=GMT%2B8";
private static final String USER_NAME = "root";
private static final String PASSWORD = "root";

/**
* 2. 需要生成的表名
*/
private static final String[] TABLE_NAME = {"sys_user", "sys_role", "sys_permission", "sys_role_permission", "sys_email", "sys_operation_log", "sys_login_log"};

/**
* 3. 包名
*/
private static final String PACKAGE_NAME = "com.ray.system";
private static final String MAPPER_NAME = "mapper";

/**
* 4. 文件生成目录
*/
private static final String JAVA_HOME = "F:/codeGen/code";
private static final String RESOURCES_HOME = "F:/codeGen/code/resources/mapper/";

/**
* 5. 开发人员
*/
private static final String AUTHOR = "Ray";

/**
* 6. 代码生成
*/
public static void main(String[] args) {
// 自定义需要填充的字段
List<TableFill> tableFillList = new ArrayList<>();
TableFill createField = new TableFill("create_time", FieldFill.INSERT);
TableFill updateField = new TableFill("update_time", FieldFill.INSERT_UPDATE);
tableFillList.add(createField);
tableFillList.add(updateField);

// 自定义需要逻辑删除的字段
String logicDeleteFieldName = "del_flag";

AutoGenerator mpg = new AutoGenerator()
.setGlobalConfig(
// 全局配置
new GlobalConfig()
.setActiveRecord(false) // 需要ActiveRecord特性 改为true
.setAuthor(AUTHOR) // 开发人员
.setOutputDir(JAVA_HOME) // 文件生成的目录
.setFileOverride(true) // 是否覆盖文件
.setEnableCache(false) // XML 二级缓存
.setBaseColumnList(true) // XML ColumnList
.setBaseResultMap(true) // XML ResultMap
.setServiceName("%sService") // 自定义文件名 %s 会自动填充表名
).setDataSource(
// 数据源配置
new DataSourceConfig()
.setDbType(DbType.MYSQL) // 数据库类型
.setUrl(URL)
.setDriverName(DRIVER)
.setUsername(USER_NAME)
.setPassword(PASSWORD)
).setStrategy(
// 策略配置
new StrategyConfig()
.setCapitalMode(true) // 全局大写命名
.setEntityLombokModel(true) // 简化代码
.setNaming(NamingStrategy.underline_to_camel) // 表名生成策略
.setInclude(TABLE_NAME) // 表名
.setTableFillList(tableFillList) // 自动填充字段
.setLogicDeleteFieldName(logicDeleteFieldName) // 逻辑删除字段
).setPackageInfo(
// 包设置
new PackageConfig()
.setParent(PACKAGE_NAME) // 自定义包路径
.setMapper(MAPPER_NAME) // 自定义数据层包名
).setCfg(
// 注入自定义配置
new InjectionConfig() {
@Override
public void initMap() {

}
}.setFileOutConfigList(
Collections.singletonList(new FileOutConfig("/templates/mapper.xml.vm") {
@Override
public String outputFile(TableInfo tableInfo) {
return RESOURCES_HOME + tableInfo.getEntityName() + "Mapper.xml";
}
}))
).setTemplate(
// 关闭默认 xml 生成,调整生成 至 根目录
new TemplateConfig().setXml(null)
);

// 执行生成
mpg.execute();
}
}