持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
无聊的时候写的,很简单,娱乐而已。
基于 Mybatis-plus 的代码生成器加上 GUI 实现,可以可视化的生成代码,方便再编写项目时生成一些文件,直接将生成的文件导入项目即可。
效果展示
GUI 界面
生成的鸡肋
实战
导入依赖
导入用到的依赖。这里自动生成 Swagger 注释 API,Lombok 注解,所以需要添加Swagger、Lombok依赖,同时由于是使用到基于 Mybatis-plus 的代码生成器生成的,还需要添加mybatis-plus、mybatis-plus-generator的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.5</version>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.4.3.4</version>
</dependency>
<!--mybatis-plus 代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
<!--freemarker模板-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
<scope>compile</scope>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.6.3</version>
</dependency>
GUI 布局
使用 IDEA 进行最基础的布局。包括操作数据库必须的数据库Url,username,password,生成的作者信息,包路径,以及为指定数据表生成,多个数据表名用英文','分割,全部则为all,OutPutDir显示生成之后的文件路径。
代码生成工具类
对生成策略进行一些简单的配置。
MyBatis-Plus 代码生成器详细讲解的博客:MyBatis-Plus——代码生成器(3.5.1+版本) - 掘金 (juejin.cn)
/**
* 代码生成工具类
*/
public class GenerateCodeUtils {
/* 判断参数是否为空,代码生成 */
public static void isTrue(String sqlUrl, String sqlUserName, String sqlPassword,
String outPutDir, String xmlOutPutDir, String sqlTable,
String author, String packageName, String modelName) throws Exception {
if (isNotNull(sqlUrl) && isNotNull(sqlUserName) && isNotNull(sqlPassword) && isNotNull(sqlTable) && isNotNull(packageName) && isNotNull(modelName)) {
GenerateCode(sqlUrl, sqlUserName, sqlPassword, outPutDir, xmlOutPutDir, sqlTable, author, packageName, modelName);
} else {
throw new Exception("字段为空");
}
}
/* 判断参数是否为空 */
public static boolean isNotNull(String str) {
return !"".equals(str) && str != null;
}
// 处理 all 情况
protected static List<String> getTables(String tables) {
return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
}
/* 调用 Mybatis-plus 的代码生成器 */
public static void GenerateCode(String sqlUrl, String sqlUserName, String sqlPassword,
String outPutDir, String xmlOutPutDir, String sqlTable,
String author, String packageName, String modelName) {
FastAutoGenerator.create(sqlUrl, sqlUserName, sqlPassword)
// 全局配置
.globalConfig((scanner, builder) -> builder.author(author)
.outputDir(outPutDir)
.commentDate("yyyy-MM-dd hh:mm:ss")
.dateType(DateType.TIME_PACK)
.enableSwagger()
.fileOverride()
.enableSwagger()
)
// 包配置
.packageConfig((scanner, builder) -> builder.parent(packageName)
.moduleName(modelName)
.entity("pojo")
.service("service")
.serviceImpl("serviceImpl")
.mapper("mapper")
.xml("mapper")
.other("utils")
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, xmlOutPutDir))
)
// 策略配置
.strategyConfig((scanner, builder) -> {
builder.addInclude(getTables(sqlTable))
.serviceBuilder()
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImpl")
.entityBuilder()
.enableLombok()
.disableSerialVersionUID()
.logicDeleteColumnName("deleted")
.naming(NamingStrategy.underline_to_camel)
.columnNaming(NamingStrategy.underline_to_camel)
.addTableFills(new Column("create_time", FieldFill.INSERT), new Column("modify_time", FieldFill.INSERT_UPDATE))
.enableTableFieldAnnotation()
.controllerBuilder()
.formatFileName("%sController")
.enableRestStyle()
.mapperBuilder()
.superClass(BaseMapper.class)
.formatMapperFileName("%sMapper")
.enableMapperAnnotation()
.formatXmlFileName("%sMapper");
})
.templateEngine(new FreemarkerTemplateEngine())
.execute();
}
}
GUI 窗口类(部分代码)
GUI 组件的布局,添加一些监听器。
/*
* GUI 窗口类
*/
public class codeGernal extends JFrame {
public static void main(String[] args) {
JFrame frame = new JFrame("codeGernal");
frame.setContentPane(new codeGernal().AutoGenerateCode);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
}
public void Generate() {
String sqlUrl = SQLURL.getText();
String sqlUserName = SQLUserName.getText();
String sqlPassword = SQLPassword.getText();
String outDir = System.getProperty("user.dir") + "\\代码生成器";
String outPutDir = System.getProperty("user.dir") + "\\代码生成器\\src\\main\\java";
String xmlOutPutDir = System.getProperty("user.dir") + "\\代码生成器\\src\\main\\resources\\";
String sqlTable = SQLTable.getText();
String author = Author.getText();
String packageName = PackageName.getText();
String modelName = ModelName.getText();
/* 获取输入框的值,调用 GenerateCodeUtils 的方法 */
try {
GenerateCodeUtils.isTrue(sqlUrl, sqlUserName, sqlPassword, outPutDir, xmlOutPutDir, sqlTable, author, packageName, modelName);
OutPutDir.setText(outDir);
TipsLabel.setText("代码生成成功");
} catch (Exception exception) {
TipsLabel.setText(exception.getMessage());
}
}
public codeGernal() {
/* GenerateButton 鼠标单击事件 */
GenerateButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Generate();
}
});
/* ResetButton 鼠标单击事件 */
ResetButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
SQLURL.setText("jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8");
SQLUserName.setText("");
SQLPassword.setText("");
SQLTable.setText("Enter table names separated by English commas or enter \"all\"");
Author.setText("");
PackageName.setText("");
ModelName.setText("");
OutPutDir.setText("Auto generate code path");
TipsLabel.setText("");
}
});
/* SQLTable 获得失去焦点事件 */
SQLTable.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
if ("Enter table names separated by English commas or enter \"all\"".equals(SQLTable.getText())) {
SQLTable.setText("");
}
}
});
SQLTable.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
if ("".equals(SQLTable.getText())) {
SQLTable.setText("Enter table names separated by English commas or enter \"all\"");
}
}
});
}
}