很多人应该都用过 MyBatis,MyBatisPlus,IDEA的MySql生成Java实体类,Mapper/Dao接口,但是生成的代码,可能并不是我们想要的效果。而且配置也麻烦。下面演示下我自己弄的MySql逆向工程。
框架提供的MySql逆向生成Java实体类
没有提供 Lombok 注解的配置,如果想用Lombok,还需要去生成的代码中加注解,再把 get/set 方法删掉。
没有提供javax.persistence注解配置,如果需要应用到该注解,就需要自己一个一个的加,很是繁琐。
没有提供Swagger注解的配置,那么也需要自己加。
生成全部表的时候,全部在一个包下。
显然我们更希望的是生成的代码能一步到位,生成后,直接用,而不是还要自己再添加一些重复而又啰嗦的代码/注解。
今天我带来了一款非常高效的MySql逆向生成代码工具,可以随意的配置与拓展,源码也很简单,且只有少量的代码。
源码下载地址 https://download.csdn.net/download/liuqi199707/16012174
先看看效果:
mysql数据表 user
生成的实体类:
如何使用的呢?
以上图片代码如下:
public static void main(String[] args) {
// 实体类配置
EntityInfo entityInfo = EntityInfo.builder()
.path("F:/liuqi-project-framework-boot/jar/mysql-generation-tool/src/main/java/com/liuqi/generate/entity") // 生成实体类,存放的路径
.enableJavax(true) // 是否启用 Javax 注解 默认false
.enableLombok(true) // 是否启用 Lombok 注解 默认false
.enableSwagger(true) // 是否启用 Swagger 注解 默认false
.setChain(true) // 是否启用 set 链式
.appendTablePackage(new EntityInfo.TablePackage("user", "user")) // 指定 user表 在 ${Swagger} + user包 下
.appendTablePackage(new EntityInfo.TablePackage("employee", "employee.e.l")) // 指定 employee表 在 ${Swagger} + employee.e.l包 下
.build();
/**
* mysql 配置
*/
MySqlGenerate mySqlGenerate = MySqlGenerate.builder()
.url("jdbc:mysql://127.0.0.1:3306/test?useSSL=true")
.username("root")
.password("123456")
.tableSchema("test") // 指定库
.tableNames("user") // 指定生成的表 (多个表用英文逗号隔开) (* 号表示全部的表)
.entityInfo(entityInfo)// 生成实体类的配置
.build();
/**
* 创建 mysql生成代码器
*/
StartMySqlGenerated startMySqlGenerated = new StartMySqlGenerated(mySqlGenerate);
/**
* 开始生成
*/
startMySqlGenerated.start();
}
是否特别简单,😀😀😀
设计与实现思路:
MySql查询数据库下所有的表。当然也可以直接指定表名。
查询数据表的所有字段信息。
遍历所有字段,生成实体类。
1:查询数据表信息:
SELECT * FROM INFORMATION_SCHEMA.tables WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'user'
2:查询数据表的所有字段信息:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'user'
以上两条Sql就是查询数据表信息,字段信息。如果不懂可自行百度查阅。
源代码项目结构:
handle
GenerateEntityCodeHandler生成实体类代码的处理器,实现了MySqlTableGenerateCodeHandler接口。
MySqlTableGenerateCodeHandler 为数据表生成代码的处理器接口,如果需要生成其他的Java代码(Mapper/Dao/Service)可实现该接口进行拓展。
info
ColumnInfo 数据表栏目(字段)的描述信息。
EntityInfo 生成实体类的配置信息。
TableInfo 数据表的描述信息。
util
FileUtil 写Java文件,写入Java代码。
MySQLToJavaCodeUtil MySql字段类型转Java数据类型。
MySqlUtil 获取MySql连接,查询 数据表/数据表字段 的信息。
StringUtil下划线转驼峰,首字母大写。
MySqlGenerate
MySql逆向生成代码的参数配置器,JDBC连接信息,需要生成代码的(数据库,数据表),实体类配置信息。
StartMySqlGenerated
MySql逆向生成代码的执行器,提供一个 start方法生成代码。
也提供了一个addMySqlTableGenerateCodeHandler方法,对生生成代码进行拓展。
注意:
该逆向生成代码,仅支持MySql,目前只能生成实体类,且没有生成toString()方法。
如果需要生成 Mapper接口,Mapper.xml文件,或者 Dao接口呢?
可以实现MySqlTableGenerateCodeHandler接口,进行拓展。
在生成代码前,添加一个自定义的代码生成器。
源码下载地址 https://download.csdn.net/download/liuqi199707/16012174
把 mysql-generation-tool 导入至 IDEA。
TestMain.java测试案例。