前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自动生成实体类,哪个最佳?

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

作者头像
江南一点雨
发布2022-04-14 16:41:19
7750
发布2022-04-14 16:41:19
举报
文章被收录于专栏:玩转JavaEE玩转JavaEE

看过松哥视频的小伙伴都知道,我个人习惯用一个名叫 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 相关依赖,一共是两个:

代码语言:javascript
复制
<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 中配置一下数据连接信息:

代码语言:javascript
复制
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,如果数据表在定义的时候刚好就是下划线那么没问题,但是如果数据表在定义的时候,不是下划线,那么自动转换之后就会出错,现在加上上面这个最后一行配置,就没问题了。

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

代码语言:javascript
复制
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/

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

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

代码语言:javascript
复制
@RestController
public class EmployeeController {

    @Autowired
    IEmployeeService iEmployeeService;

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 江南一点雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档