数据模型(数据库表设计)生成代码

简介: BizWorks ToolKit 插件集成 Mybatis-Plus 代码生成工具,支持从数据库表批量生成代码,简化开发流程。本文详细介绍配置方法及项目示例,包括配置文件格式、生成选项及具体操作步骤,帮助开发者快速实现代码同步更新。配置文件 `.mp.yaml` 支持自定义输出目录、生成组件等,适用于多种项目结构。

为了便于在研发过程中数据模型(数据库表设计)变更后即时做代码同步,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)。

最简配置示例如下。代码效果参考:https://www.weibow.com/sitemap/post.html

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

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

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

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

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

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

以步骤1图中的项目为例,假设您想生成一个表到businessdomain-ninethreezerodomain\ninethreezerodomain-app路径下,您可以通过配置outputDir以及packageConfig.parent进行生成输出目录的配置,如下代码outputDir,parent所示,配置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

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

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

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:
相关文章
|
2月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
2月前
|
存储 监控 数据处理
flink 向doris 数据库写入数据时出现背压如何排查?
本文介绍了如何确定和解决Flink任务向Doris数据库写入数据时遇到的背压问题。首先通过Flink Web UI和性能指标监控识别背压,然后从Doris数据库性能、网络连接稳定性、Flink任务数据处理逻辑及资源配置等方面排查原因,并通过分析相关日志进一步定位问题。
188 61
|
3天前
|
SQL 存储 运维
从建模到运维:联犀如何完美融入时序数据库 TDengine 实现物联网数据流畅管理
本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品。文章从一个具体的业务场景出发,分析了企业在面对海量时序数据时的挑战,并提出了利用 TDengine 高效处理和存储数据的方法,帮助企业解决在数据采集、存储、分析等方面的痛点。通过这篇文章,作者不仅展示了自己对数据处理技术的理解,还进一步阐释了时序数据库在行业中的潜力与应用价值,为读者提供了很多实际的操作思路和技术选型的参考。
16 1
|
7天前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
10天前
|
前端开发 JavaScript 数据库
获取数据库中字段的数据作为下拉框选项
获取数据库中字段的数据作为下拉框选项
39 5
|
9天前
|
SQL Java 数据库连接
JDBC编程安装———通过代码操控数据库
本文,教你从0开始学习JBCD,包括驱动包的下载安装调试设置,以及java是如何通过JBDC实现对数据库的操作,以及代码的分析,超级详细
|
2月前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
166 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
2月前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
2月前
|
关系型数据库 分布式数据库 数据库
云栖大会|从数据到决策:AI时代数据库如何实现高效数据管理?
在2024云栖大会「海量数据的高效存储与管理」专场,阿里云瑶池讲师团携手AMD、FunPlus、太美医疗科技、中石化、平安科技以及小赢科技、迅雷集团的资深技术专家深入分享了阿里云在OLTP方向的最新技术进展和行业最佳实践。
|
2月前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例