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

Stephen

共 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();

上面的配置分了四块:

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

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

浏览 29
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报