从数据库表批量生成代码

为了便于在研发过程中数据模型(数据库表设计)变更后即时做代码同步,BizWorks ToolKit插件集成了Mybatis-Plus代码生成工具,支持从数据库表生成代码。本文介绍如何从数据库表批量生成代码,以及相应的配置说明和项目示例。

从数据库表批量生成代码的配置说明

重要

配置值需用半角双引号("")包含。

BizWorks ToolKit插件使用配置文件(*.mp.yaml)的方式描述MyBatis-Plus代码生成行为。通常这个配置文件只需配置一次,即可提交到代码仓库共享,便于沉淀维护库表映射到代码的规则。

配置文件在代码中没有预置,如果您需要使用可以在项目的任意位置新建,推荐您将其存放于src/main/resource/bizworks/mybatis-plus/路径下。

说明

以下规则只符合平台的MVC代码模板,代码模板不匹配情况不适用。generateAllCode默认值为false

  • 如果generateAllCode设置为true, 则会生成所有的代码(controller,service,do,dto,mapper,impl..)。

  • 如果generateAllCode设置为false,则只会生成dao层代码(mapper,do)。

最简配置示例如下。

bizworks:
  generator:
    mybatisPlusFromDB:
      # 数据库配置信息
      dataSource:
        url:
        username:
        password:
      global:
        # 指定输出目录,默认值: ${vcsRoot}/mybatis-plus-default/
          # ${vcsRoot} 为代码仓库根目录
        outputDir: ${vcsRoot}/mybatis-plus-default/
      packageConfig:
        # 父包名,默认值:com.bizworks.example.domain.tunnel
        parent: com.bizworks.example.domain.tunnel
      strategy:
        generateAllCode: false
        # 配置需要生成的表,如果未配置,则生成数据库下所有表
        includes:
          - "demo_table"

上述配置示例完善后即可生成demo_table对应的代码。您也可以不配置以生成全表所有库,或是配置更多紧密相关的表在一个文件同时生成,其他表则配置在其他文件中。

关于完整版配置示例,请参见生成代码完整版配置

从数据库表批量生成代码

打开IDEA,您可以通过以下两种方式从数据库表批量生成代码。

  • 在左侧导航栏,右键单击配置文件(*.mp.yaml)后,选择BizWorks > Mybatis-Plus生成image.png

  • 在打开的配置文件(*.mp.yaml)中,单击右键后,选择BizWorks > Mybatis-Plus生成image.png

项目示例

  1. 如果您有一个多模块项目,您可将配置文件放置于starter/resource/bizworks路径下,例如下图中simplification.mp.yaml1

  2. 右键单击配置文件simplification.mp.yaml后,选择从配置文件生成Mybatis-Plus

  3. 如果您只配置了数据库信息,没有配置输出目录以及需要生成的表(如第1步中的图片所示)。IDEA则会根据默认输出目录输出生成文件,且会将数据库中所有表都生成,具体如下图所示。

    默认输出目录:项目根目录/mybatis-plus-default/com/bizworks/example/domain/tunnel1

  4. 如果您想将文件生成到某个模块的某个包下,您可以配置输出目录以及Package进行准确位置的输出,例如:通过配置includes进行准确文件的输出。

    以步骤1图中的项目为例,假设您想生成一个表到businessdomain-ninethreezerodomain\ninethreezerodomain-app路径下,您可以通过配置outputDir以及packageConfig.parent进行生成输出目录的配置,如下代码outputDirparent所示,配置includes进行表的选择,具体请参见如下代码示例。

    bizworks:
      generator:
        mybatisPlusFromDB:
          # 数据库配置信息
          dataSource:
            url:
            username:
            password:
          global:
            # 指定输出目录,默认值: ${vcsRoot}/mybatis-plus-default/
              # ${vcsRoot} 为项目根目录
            outputDir: ${vcsRoot}/businessdomain-ninethreezerodomain/ninethreezerodomain-app/src/main/java
          packageConfig:
            # 父包名,默认值:com.bizworks.example.domain.tunnel
            parent: ninegroup.generator.businessdomain.ninethreezerodomain.app.mybatisplus.generator
          strategy:
            generateAllCode: false
            # 配置需要生成的表,如果未配置,则生成数据库下所有表
            includes:
              - "biz_modelcenter_app"
                            

    生成结果如下图所示。1

  5. 如果您想了解更多的自定义配置,例如:是否启用swagger,是否启用lombokcontroller格式化命名等配置,请参见生成代码完整版配置

生成代码精简版配置

生成代码精简版配置的代码示例如下:

bizworks:
  generator:
    mybatisPlusFromDB:
      # 数据库配置信息
      dataSource:
        url:
        username:
        password:
      global:
        # 指定输出目录,默认值: ${vcsRoot}/mybatis-plus-default/
        # ${vcsRoot} 为项目根目录
        outputDir:
      packageConfig:
        # 父包名,默认值:com.bizworks.example.domain.tunnel
        parent:
      strategy:
        generateAllCode: false
        # 配置需要生成的表,如果未配置,则生成数据库下所有表
        includes:
          - ""
            

生成代码完整版配置

生成代码完整版配置的代码示例如下:

bizworks:
  generator:
    mybatisPlusFromDB:
      # 数据库配置信息
      dataSource:
        url:
        username:
        password:
        schemaName: ""
      global:
        #    禁止打开输出目录    默认值:true,true = 不打开,false = 打开
        disableOpenDir: true
        #    指定输出目录 默认值: ${vcsRoot}/mybatis-plus-default/
          # ${vcsRoot} 为项目根目录
        outputDir:
        #    作者名    默认值:BizWorks Toolkit
        author: BizWorks Toolkit
        #    开启 kotlin 模式    默认值:false,false = 不开启,true = 开启
        enableKotlin: false
        #    开启 swagger 模式    默认值:false,false = 不开启,true = 开启
        enableSwagger: false
        #    时间策略    DateType.ONLY_DATE 默认值: DateType.TIME_PACK
        dateType: TIME_PACK
        #    注释日期    默认值: yyyy-MM-dd
        commentDate: yyyy-MM-dd
      packageConfig:
        # 父包名    默认值:com.bizworks.example.domain.tunnel
        parent:
        # 父包模块名    默认值:无
        moduleName: ""
        # Entity 包名    默认值:entity
        entity: entity
        # Service 包名    默认值:service
        service: service
        # Service Impl 包名    默认值:service.impl
        serviceImpl: service.impl
        # Mapper 包名    默认值:mapper
        mapper: mapper
        # Mapper XML 包名    默认值:mapper.xml
        xml: mapper.xml
        # Controller 包名    默认值:controller
        controller: controller
        # 路径配置信息 以xml为例:${vcsRoot}/模块名/src/main/resources
        pathInfo:
          parent:
          entity:
          service:
          serviceImpl:
          mapper:
          xml:
          controller:
      template:
        # 启用模板, list,不在此列的不会生成相关模板,默认开启ENTITY,MAPPER  关闭SERVICE,SERVICE_IMPL,CONTROLLER,XML
        enable:
          - ENTITY
          - MAPPER
        #(String)    设置实体模板路径(JAVA)    例:${vcsRoot}/templates/entity.java
        entity:
        #(String)    设置实体模板路径(kotlin)    /templates/entity.java
        entityKt:
        #(String)    设置 service 模板路径    /templates/service.java
        service:
        #(String)    设置 serviceImpl 模板路径    /templates/serviceImpl.java
        serviceImpl:
        #(String)    设置 mapper 模板路径    /templates/mapper.java
        mapper:
        #(String)    设置 mapperXml 模板路径    /templates/mapper.xml
        mapperXml:
        #(String)    设置 controller 模板路径    /templates/controller.java
        controller:
      strategy:
        generateAllCode: false
        #     开启大写命名    默认值:false
        enableCapitalMode: false
        #     开启跳过视图    默认值:false
        enableSkipView: false
        #     禁用 sql 过滤    默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关
        disableSqlFilter: true
        #     启用 schema    默认值:false,多 schema 场景的时候打开
        enableSchema: false
        # (LikeTable)    模糊表匹配(sql 过滤)    likeTable 与 notLikeTable 只能配置一项
        likeTable:
        # (LikeTable)    模糊表排除(sql 过滤)    likeTable 与 notLikeTable 只能配置一项
        notLikeTable:
        # (String...)    配置需要生成的表    includes 与 excludes 只能配置一项
        includes:
          - ""
        # (String...)    增加表排除匹配(内存过滤)    includes 与 excludes 只能配置一项
        excludes:
          - ""
        # (String...)    增加过滤表前缀
        tablePrefix:
          - ""
        # (String...)    增加过滤表后缀
        tableSuffix:
          - ""
        # (String...)    增加过滤字段前缀
        fieldPrefix:
          - ""
        # (String...)    增加过滤字段后缀
        fieldSuffix:
          - ""
        #     实体策略配置
        entity:
          #覆盖已生成文件 默认false,false = 不覆盖,true = 覆盖
          enableFileOverride: false
          # (INameConvert)    名称转换实现
          nameConvert:
          # (String)    设置父类    com.baomidou.global.BaseEntity
          superClass:
          # 禁用生成 serialVersionUID    默认值:true,true = 不生成serID,false = 生成
          disableSerialVersionUID: true
          # 开启生成字段常量    默认值:false
          enableColumnConstant: false
          # 开启链式模型    默认值:false
          enableChainModel: false
          # 开启 lombok 模型    默认值:true,true = 开启,false = 不开启
          enableLombok: true
          # 开启 Boolean 类型字段移除 is 前缀    默认值:false
          enableRemoveIsPrefix: false
          # 开启生成实体时生成字段注解    默认值:true
          enableTableFieldAnnotation: true
          # 开启 ActiveRecord 模型    默认值:false
          enableActiveRecord: false
          # (String)    乐观锁字段名(数据库)
          versionColumnName:
          # (String)    乐观锁属性名(实体)
          versionPropertyName:
          # (String)    逻辑删除字段名(数据库)
          logicDeleteColumnName:
          # (String)    逻辑删除属性名(实体)
          logicDeletePropertyName:
          # 数据库表映射到实体的命名策略    默认下划线转驼峰命名:NamingStrategy.underline_to_camel
          naming: underline_to_camel
          # 数据库表字段映射到实体的命名策略    默认为 null,未指定按照 naming 执行
          columnNaming:
          # (String...)    添加父类公共字段
          superEntityColumns:
            - ""
            - ""
          # (String...)    添加忽略字段
          ignoreColumns:
            - ""
            - ""
          # (IdType)    全局主键类型
          idType:
          # (String)    格式化文件名称
          formatFileName:
        #     controller 策略配置
        controller:
          #覆盖已生成文件 默认false不覆盖
          enableFileOverride: false
          # (String)    默认true 不生成controller
          disable: true
          # (String)    设置父类    com.baomidou.global.BaseController
          superClass: ""
          #     开启驼峰转连字符    默认值:false
          enableHyphenStyle: false
          #     开启生成@RestController 控制器    默认值:false
          enableRestStyle: false
          # (String)    格式化文件名称
          formatFileName:
        #     service 策略配置
        service:
          #覆盖已生成文件 默认false不覆盖
          enableFileOverride: false
          #(String)    设置 service 接口父类    com.baomidou.global.BaseService
          superServiceClass:
          #(String)    设置 service 实现类父类    com.baomidou.global.BaseServiceImpl
          superServiceImplClass:
          #(String)    格式化 service 接口文件s名称
          formatServiceFileName:
          #(String)    格式化 service 实现类文件名称
          formatServiceImplFileName:
        #     mapper 策略配置
        mapper:
          #覆盖已生成文件 默认false不覆盖
          enableFileOverride: false
          #(String)    设置父类     默认:com.baomidou.mybatisplus.core.mapper.BaseMapper
          superClass: "com.baomidou.mybatisplus.core.mapper.BaseMapper"
          #    开启 @Mapper 注解    annotationClass – 注解Class 默认为 org.apache.ibatis.annotations.Mapper
          mapperAnnotation: org.apache.ibatis.annotations.Mapper
          #    启用 BaseResultMap 生成    默认值:false
          enableBaseResultMap: false
          #    启用 BaseColumnList    默认值:false
          enableBaseColumnList: false
          #(Class<? extends Cache>)    设置缓存实现类    MyMapperCache.class
          cache:
          #(String)    格式化 mapper 文件名称
          formatMapperFileName:
          #(String) 格式化 xml 实现类文件名称
          formatXmlFileName: