自动生成实体类,哪个最佳?
共 3075字,需浏览 7分钟
·
2022-04-27 23:49
看过松哥视频的小伙伴都知道,我个人习惯用一个名叫 MyBatis Generator 的逆向工具,利用这个工具我们自动生成实体类和 mapper 接口以及对应的 xml 文件,MyBatis Generator 是一个独立工具,你可以下载它的 jar 包来运行、也可以在 Ant 或者 maven 中配置插件运行。
大家在公众号后台回复 mybatis-gen 有这个工具的下载链接。
虽然我一直用这个工具,但是总感觉它太有年代感了,用久了有点腻。所以很多时候看到公众号里有人推荐其他的 MyBatis 逆向工具,我也都会去试一试,特别是一些 IDEA 中的插件。
这些插件我目前装了几个开源免费的,不过都不怎么好用,而且几乎都有 BUG。不过这块也有一些是付费的插件,付费的应该会好用一些,不过我没怎么试过,毕竟这并不是刚需。
去年我还自己开发了一个工具,手把手教大家完成一个自己的 MyBatis 逆向工具,还录了一个配套视频:
https://www.bilibili.com/video/BV1Vo4y1Z7af
项目地址:
https://github.com/lenve/generate_code
除了这些工具之外,我最近用的比较多的是一个 MyBatis-Plus 提供的,也是非常方便,如果你项目中用到了 MyBatis-Plus,那么这个工具还是特别好用的。
我给大家举一个简单例子。
首先我们创建一个 Spring Boot 工具,引入 Web、MyBatis、Freemarker 以及 MySQL 驱动,如下:
引入 Freemarker 是因为我们将来使用 Freemarker 做代码模板,松哥之前自己开发的那个逆向工程,里边使用的代码模版就是 Freemarker。
项目创建成功之后,引入 MyBatis-Plus 相关依赖,一共是两个:
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-generatorartifactId>
<version>3.5.2version>
dependency>
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.5.1version>
dependency>
一个是 MP 自己的依赖,还有一个是逆向工程的依赖。
接下来我们在 application.properties 中配置一下数据连接信息:
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,如果数据表在定义的时候刚好就是下划线那么没问题,但是如果数据表在定义的时候,不是下划线,那么自动转换之后就会出错,现在加上上面这个最后一行配置,就没问题了。
项目创建成功后,我们直接在单元测试中添加如下代码,进行代码生成:
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();
上面的配置分了四块:
globalConfig:这个是全剧配置,配置了生成的代码注释中的作者信息;默认情况下,代码生成完毕后会自动打开生成的目录,disableOpenDir 方法表示禁用这个功能;fileOverride 方法即将被移除,未来会不可用;最后的 outputDir 方法则是指定生成代码的输出目录。 packageConfig:这个是配置生成的包信息,parent 方法用来设置父包名;moduleName 设置父包模块名,这个参数的值加上 parent 的参数值,就是完整的包路径;最后面则是指定了生成的 mapper.xml 文件的位置。 strategyConfig:这个是配置策略,对于我们来说,这里比较重要的就是配置需要逆向的表,将表名称挨个列出来。 templteEngine:这个是配置模版引擎。
除了上面这些常规的配置外,如果你的需求比较特殊,也可以配置其他选项,具体的参考这个文档:
https://baomidou.com/pages/981406/
配置完成后,执行这段单元测试代码,生成相关代码,如下:
接下来,想做增删改查,直接做即可,像下面这样:
@RestController
public class EmployeeController {
@Autowired
IEmployeeService iEmployeeService;
@GetMapping("/emps")
public List getAllEmps() {
List list = iEmployeeService.list();
return list;
}
}
IEmployeeService 继承自 IService,常规的增删改查该有的都有。
最近感觉这个比较好用,我一直在用这个,感兴趣的小伙伴不妨试试。