还在使用MyBatis Generator?试试这个工具

3,579 阅读3分钟

代码生成

在企业软件开发过程中,大多数时间都是面向数据库表的增删改查开发。通过通用的增删改查代码生成器,可以有效的提高效率,降低成本;把有规则的重复性劳动让机器完成,解放开发人员。

MyBatis Generator

  • MyBatis Generator 是 MyBatis 提供的一个代码生成工具

可以帮我们生成表对应的持久化对象(po)、操作数据库的接口(dao)、CRUD sql 的 xml(mapper)。

<plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>${last.version}</version>
    <configuration>
        <!--mybatis的代码生成器的配置策略文件-->
        <configurationFile>mybatis-generator-config.xml</configurationFile>
    </configuration>
</plugin>
  • 配置代码生成相关的策略文件 mybatis-generator-config.xml
<generatorConfiguration>
    <context>
        <!-- jdbc连接 -->
        <jdbcConnection> ... </jdbcConnection>
        <!-- schema为数据库名,tableName为对应的数据库表名 -->
        <table> ... </table>
        <!-- 注释 -->
        <commentGenerator> ... </commentGenerator>
        <!-- 类型转换 -->
        <javaTypeResolver> ... </javaTypeResolver>
        <!-- 生成实体类配置 -->
        <javaModelGenerator> ... </javaModelGenerator>
        <!-- 生成Mapper.xml文件配置 -->
        <sqlMapGenerator> ... </sqlMapGenerator>
        <!-- 生成Mapper.java 接口-->
        <javaClientGenerator> ... </javaClientGenerator>
    </context>
</generatorConfiguration>
  • 缺点
  1. 每次代码生成需要配置对应的 mybatis-generator-config 通过 XML 的形式配置相关生成属性和规则
  2. 无法生成通用的 Controller、Service 类,无法自定义模板等

综上两点: mybatis-generator 使用非常不方便

EasyCode

EasyCode[1] 是基于 IntelliJ IDEA Ultimate 版开发的一个代码生成插件,主要通过自定义模板(基于 velocity)来生成各种你想要的代码。通常用于生成 Entity、Dao、Service、Controller。如果你动手能力强还可以用于生成 HTML、JS、PHP 等代码。理论上来说只要是与数据有关的代码都是可以生成的。

快速上手

  1. 安装 IDEA EasyCode 插件。 支持在线安装,插件市场搜索安装即可。

  2. 使用 IDEA 连接目标数据源

  1. 选择目标表进行代码生成

进阶配置

如上即可完成基于单表的增删改查方法,包括 Controller、Service、Mapper、Entity。 但默认生成是基于原生 MyBatis 的通用文件,不适用于 MyBatisPlus、通用 Mapper 等 Mybatis 扩展插件。我们可以通过编辑 EasyCode 的模板文件,来动态添加我们的生成规则,并且可以导出给其他人使用。

  • 甚至于可以配置新的模板生成前端页面,比如基于 Element 的增删改查

总结

  • 当然很多脚手架都会内置代码生成功能。 例如 pig[2] 的开发平台模块 ,通过自定义模板引擎形式实现代码生成,能够更好的整合现有业务提开发效率。

Reference

[1]

EasyCode: https://github.com/makejavas/EasyCode

[2]

pig: https://github.com/pig-mesh/pig