自动生成实体类,哪个最佳?

看过松哥视频的小伙伴都知道,我个人习惯用一个名叫 MyBatis Generator 的逆向工具,利用这个工具我们自动生成实体类和 mapper 接口以及对应的 xml 文件,MyBatis Generator 是一个独立工具,你可以下载它的 jar 包来运行、也可以在 Ant 或者 maven 中配置插件运行。

大家在松哥公众号后台回复 mybatis-gen 有这个工具的下载链接。

虽然我一直用这个工具,但是总感觉它太有年代感了,用久了有点腻。所以很多时候看到公众号里有人推荐其他的 MyBatis 逆向工具,我也都会去试一试,特别是一些 IDEA 中的插件。

这些插件我目前装了几个开源免费的,不过都不怎么好用,而且几乎都有 BUG。不过这块也有一些是付费的插件,付费的应该会好用一些,不过我没怎么试过,毕竟这并不是刚需。

去年我还自己开发了一个工具,手把手教大家完成一个自己的 MyBatis 逆向工具,还录了一个配套视频:

项目地址:

除了这些工具之外,我最近用的比较多的是一个 MyBatis-Plus 提供的,也是非常方便,如果你项目中用到了 MyBatis-Plus,那么这个工具还是特别好用的。

我给大家举一个简单例子。

首先我们创建一个 Spring Boot 工具,引入 Web、MyBatis、Freemarker 以及 MySQL 驱动,如下:

引入 Freemarker 是因为我们将来使用 Freemarker 做代码模板,松哥之前自己开发的那个逆向工程,里边使用的代码模版就是 Freemarker。

项目创建成功之后,引入 MyBatis-Plus 相关依赖,一共是两个:

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>

一个是 MP 自己的依赖,还有一个是逆向工程的依赖。

接下来我们在 application.properties 中配置一下数据连接信息:

1
2
3
4
5
spring.datasource.url=jdbc:mysql:///vhr?serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.username=root
spring.datasource.password=123

mybatis-plus.configuration.map-underscore-to-camel-case=false

上面三行是数据库连接的基本信息。最下面一行表示在 MP 将来查询的时候,不要自动进行列名转化。啥意思呢?比如我在 Book 类中有一个属性名为 authorName,那么在 MP 去数据库查询的时候,会自动把 authorName 转为 author_name,如果数据表在定义的时候刚好就是下划线那么没问题,但是如果数据表在定义的时候,不是下划线,那么自动转换之后就会出错,现在加上上面这个最后一行配置,就没问题了。

项目创建成功后,我们直接在单元测试中添加如下代码,进行代码生成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
FastAutoGenerator.create("jdbc:mysql:///vhr?serverTimezone=Asia/Shanghai&useSSL=false", "root", "123")
.globalConfig(builder -> {
builder.author("javaboy") // 设置作者
.disableOpenDir()
.fileOverride() // 覆盖已生成文件
.outputDir("src/main/java"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("org.javaboy") // 设置父包名
.moduleName("mybatis_gen") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.xml, "src/main/resources/mapper")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("employee") // 设置需要生成的表名
.addTablePrefix("t_", "c_"); // 设置过滤表前缀
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();

上面的配置分了四块:

  1. globalConfig:这个是全剧配置,配置了生成的代码注释中的作者信息;默认情况下,代码生成完毕后会自动打开生成的目录,disableOpenDir 方法表示禁用这个功能;fileOverride 方法即将被移除,未来会不可用;最后的 outputDir 方法则是指定生成代码的输出目录。
  2. packageConfig:这个是配置生成的包信息,parent 方法用来设置父包名;moduleName 设置父包模块名,这个参数的值加上 parent 的参数值,就是完整的包路径;最后面则是指定了生成的 mapper.xml 文件的位置。
  3. strategyConfig:这个是配置策略,对于我们来说,这里比较重要的就是配置需要逆向的表,将表名称挨个列出来。
  4. templteEngine:这个是配置模版引擎。

除了上面这些常规的配置外,如果你的需求比较特殊,也可以配置其他选项,具体的参考这个文档:

配置完成后,执行这段单元测试代码,生成相关代码,如下:

接下来,想做增删改查,直接做即可,像下面这样:

1
2
3
4
5
6
7
8
9
10
11
12
@RestController
public class EmployeeController {

@Autowired
IEmployeeService iEmployeeService;

@GetMapping("/emps")
public List<Employee> getAllEmps() {
List<Employee> list = iEmployeeService.list();
return list;
}
}

IEmployeeService 继承自 IService,常规的增删改查该有的都有。

最近感觉这个比较好用,我一直在用这个,感兴趣的小伙伴不妨试试。

小伙伴们有什么好用的逆向工程工具欢迎留言推荐。

喜欢这篇文章吗?扫码关注公众号【江南一点雨】【江南一点雨】专注于 SPRING BOOT+微服务以及前后端分离技术,每天推送原创技术干货,关注后回复 JAVA,领取松哥为你精心准备的 JAVA 干货!

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×