Java项目实战4——代码生成

@TOC

mybatis-plus代码生成

导入依赖

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>XXX</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>XXX</version>
</dependency>
XML

测试类中编写如下:

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
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Collections;

public class GeneratorTest {
//参考地址
//https://baomidou.com/pages/981406/#%E7%AD%96%E7%95%A5%E9%85%8D%E7%BD%AE-strategyconfig
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/hao?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8";
String userName = "XXXXXX";
String password = "XXXXXX";
FastAutoGenerator.create(url, userName, password)
.globalConfig(builder -> {
builder.author("lihao") // 设置作者
.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.disableOpenDir()
.outputDir("E:\\code\\gitee\\hao\\hao-blog\\src\\main\\java"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com.hao") // 设置父包名
.moduleName("") // 设置父包模块名
.entity("entity") //entity名称
.service("service")
.serviceImpl("service.impl")
.mapper("mapper")
.xml("mapper.xml")
.controller("controller")
.other("other")
.pathInfo(Collections.singletonMap(OutputFile.xml, "E:\\code\\gitee\\hao\\hao-blog\\src\\main\\java\\com\\hao\\mapper")); // 设置mapperXml生成路径
})
//entity配置
.strategyConfig(builder -> {
builder.entityBuilder()
.enableLombok();
})
//controller
.strategyConfig(builder -> {
builder.controllerBuilder()
.enableRestStyle();
})
//service

//mapper
.strategyConfig(builder -> {
builder.mapperBuilder()
.enableBaseResultMap()
.enableBaseColumnList();
})
.strategyConfig(builder -> {
builder.addInclude("xxx", "xxx") // 设置需要生成的表名
.addTablePrefix(""); // 设置过滤表前缀
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();

}
}
JAVA

编辑好后,运行即可生成基础代码。

更改springfox 格式的doc为springdoc格式

因为默认生成的代码中,model的doc为springfox,我们需要调整为springdoc。
映射关系如下:

1
2
3
4
5
6
7
8
9
10
@Api -> @Tag
@ApiIgnore -> @Parameter(hidden = true) or @Operation(hidden = true) or @Hidden
@ApiImplicitParam -> @Parameter
@ApiImplicitParams -> @Parameters
@ApiModel -> @Schema
@ApiModelProperty(hidden = true) -> @Schema(accessMode = READ_ONLY)
@ApiModelProperty -> @Schema
@ApiOperation(value = "foo", notes = "bar") -> @Operation(summary = "foo", description = "bar")
@ApiParam -> @Parameter
@ApiResponse(code = 404, message = "foo") -> @ApiResponse(responseCode = "404", description = "foo")
LESS

例如:

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
package com.hao.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
* <p>
* 用户信息表
* </p>
*
* @author lihao
* @since 2022-07-03
*/
@Data
@TableName("user")
@Schema(title = "User对象")
public class User implements Serializable {

private static final long serialVersionUID = 1L;

@Schema(title = "用户ID")
private String id;

@Schema(title = "用户昵称")
private String nickName;

@Schema(title = "用户姓名")
private String userName;

@Schema(title = "年龄")
private Integer age;

@Schema(title = "性别-1男2女-默认1")
private Integer sex;

@Schema(title = "电子邮箱")
private String email;

@Schema(title = "手机号")
private String phone;

@Schema(title = "状态-1.正常-2.锁定-默认1")
private Integer status;

@Schema(title = "创建时间")
private LocalDateTime createTime;

@Schema(title = "修改时间")
private LocalDateTime updateTime;

@Schema(title = "创建者")
private String createUser;

@Schema(title = "修改者")
private String updateUser;
}
JAVA

彩蛋

idea免重启自动部署已修改的Java文件。
当我们以debug模式启动springboot项目后,如果有对Java代码做修改,但我们又不想每次修改完之后重启项目,想立马看到修改后的效果。
其实idea有自带这个特性,比devtools个人感觉好用,也比较简单。
在idea的启动配置里,选择modify options,配置 on update action即可。


下次,我们如果在运行中对Java代码有修改,可以直接ctr+F9,或者点击一个锤子图标:Builde Project。那么一般情况下,是不需要重启项目的。
另:如果是一些特殊的更改,比如配置文件、注解标签之类的,还是需要重启项目的。


Java项目实战4——代码生成
https://leehoward.cn/2022/07/03/Java项目实战4——代码生成/
作者
lihao
发布于
2022年7月3日
许可协议