Mybatis-plus代码生成器模板与使用注意事项


Mybatis-plus代码生成器模板与使用注意事项

默认已经创建了Maven新项目

  1. 导入jar依赖包,以我的为例在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
    <!--引入mysql依赖-->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.18</version>
    </dependency>
    <!--添加Mybatis-plus-->
    <dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>3.3.1</version>
    </dependency>
    <!--添加MybatisPlus代码生成器-->
    <dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.3.1</version>
    </dependency>
    <!--添加MybatisPlus代码生成器的自定义模板依赖-->
    <dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.29</version>
    </dependency>
    <!--添加junit单元测试-->
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    </dependency>
    <!--简化JavaBean代码的lombok-->
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.4</version>
    </dependency>
    <!--打印日志工具log4j-->
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.4</version>
    </dependency>
  2. 在项目下新建类运行如下代码,我的类运行在含junit依赖的Maven项目的test/java下,如果你也使用如下代码则需要修改一些属性

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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
package com.gugu;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.FileOutConfig;
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.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

public class AutoGenerate {
/**
* 数据库名字
*/
private final static String databaseName = "mybatisplus";
/**
* 连接MySQL的url,MySQL版本8及以上未在MysQL设置时区的最好在后面拼上serverTimezone参数
*/
private final static String url = "jdbc:mysql://localhost:3306/" + databaseName + "?serverTimezone=GMT&characterEncoding=utf8";
/**
* MySQL版本在8以下的使用com.mysql.jdbc.Driver
*/
private final static String driver = "com.mysql.cj.jdbc.Driver";
/**
* MySQL用户名
*/
private final static String username = "root";
/**
* MySQL密码
*/
private final static String password = "root";
/**
* 设置父包名
*/
private final static String parentPackageName = "com.gugu";
/**
* 自己的父类实体,没有就不用设置
*/
private final static String superEntityClass = "";
/**
* 是否开启Lombok
*/
private final static Boolean lombokFlag = true;
/**
* 自己的父类控制器,没有就不用设置
*/
private final static String superControllerClass = "";

public static void main(String[] args) {
String developerName = scanner("开发人员名字");
String modelName = scanner("模块名");
String tableName = scanner("数据库表名,多个表使用英文逗号分割");
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor(developerName);
gc.setOpen(false);
// gc.setSwagger2(true); 实体属性 Swagger2 注解
mpg.setGlobalConfig(gc);

// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl(url);
// dsc.setSchemaName("public");
dsc.setDriverName(driver);
dsc.setUsername(username);
dsc.setPassword(password);
mpg.setDataSource(dsc);

// 包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName(modelName);
pc.setParent(parentPackageName);
mpg.setPackageInfo(pc);

// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};

// 如果模板引擎是 freemarker
String templatePath = "/templates/mapper.xml.ftl";
// 如果模板引擎是 velocity
// String templatePath = "/templates/mapper.xml.vm";

// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定义配置会被优先输出
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
/*
cfg.setFileCreate(new IFileCreate() {
@Override
public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
// 判断自定义文件夹是否需要创建
checkDir("调用默认方法创建的目录");
return false;
}
});
*/
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);

// 配置模板
TemplateConfig templateConfig = new TemplateConfig();

// 配置自定义输出模板
//指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
// templateConfig.setEntity("templates/entity2.java");
// templateConfig.setService();
// templateConfig.setController();

templateConfig.setXml(null);
mpg.setTemplate(templateConfig);

// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setSuperEntityClass(superEntityClass);
strategy.setEntityLombokModel(lombokFlag);
strategy.setRestControllerStyle(true);
// 公共父类
strategy.setSuperControllerClass(superControllerClass);
// 写于父类中的公共字段
strategy.setSuperEntityColumns("id");
strategy.setInclude(tableName.split(","));
strategy.setControllerMappingHyphenStyle(true);
strategy.setTablePrefix(pc.getModuleName() + "_");
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}

/**
* 根据输入的信息,提示信息并要求输入,返回输入的字符串
*
* @param tip 要提示输入的信息
* @return 输入的字符串
*/
public static String scanner(String tip) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入" + tip + ":");
if (scanner.hasNext()) {
String ipt = scanner.next();
if (StringUtils.isNotBlank(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
}
  1. 运行过程与结果

alt 运行过程

(警告是因为没有设置log4j)

alt 运行结果


注意事项

  1. 输入表名是必须要对应数据库中的表名,否则会报错
  2. 不要忘记引入log4j

可能出现的问题

  1. projectPath,new ArrayList<>()冒红报错

    • 使用快捷键Ctrl+Alt+Shift+s打开工程设置Project Settings->Moudues设置Language level语言等级为8
  2. Error:java: 错误: 不支持发行版本 5

    • 在pom.xml中增加build,设置Maven语言编译级别为jdk1.8

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      <build>
      <plugins>
      <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.1</version>
      <configuration>
      <source>1.8</source>
      <target>1.8</target>
      </configuration>
      </plugin>
      </plugins>
      </build>

建议

如果不喜欢生成的文件名则自己手动修改


Mybatis-plus代码生成器模板与使用注意事项
https://blog.gugu.dev/2024-02-21/Mybatis-plus代码生成器模板与使用注意事项/
作者
MinMin
发布于
2024年2月21日
许可协议