代码生成
前言
本框架所提供的代码生成器在功能上与其他后端代码生成器相似,其工作原理主要是基于数据表信息的读取来收集元数据,并随后利用模板引擎精准地生成对应的代码。这种设计不仅实现了代码生成的自动化,还大大提高了生成效率,从而满足了开发者对于快速生成规范、高效代码的需求。值得一提的是,我们的代码生成方案实现了前后端的完全分离。前端开发拥有其专用的代码生成工具,而后端开发则采用独立的后端代码生成工具。在这里,我们主要聚焦于后端开发的代码生成部分,为后端开发者提供更为便捷、高效的代码生成体验。
模块介绍
后端的代码生成功能是以强大的 mybatis-plus-generator 为基础构建的。mybatis-plus-generator
本身已经具备了完善的代码生成逻辑,因此,我们仅需在现有框架的基础上进行简单的改造和优化,即可轻松满足我们的特定需求。这种基于成熟框架的定制开发方式,不仅节省了我们大量的开发时间,还确保了生成的代码质量稳定可靠。通过我们的改造,代码生成器将更加符合我们的项目规范,进一步提升开发效率。
├── mldong-generator 代码生成器
├── src/main/java/com/mldong/genertor/CodeGenerator.java 代码生成器主类
├── src/main/java/com/mldong/genertor/EnhanceFreemarkerTemplateEngine.java 代码生成器支持自定义[DTO\VO等]模版
└── src/main/resources
├── templates 代码生成模板
├── controller.java.ftl 控制层模板
├── entity.java.ftl 实体类模板
├── mapper.java.ftl 持久层模板
├── mapper.xml.ftl 持久层xml模板
├── pageParam.java.ftl 分页查询实体类模板
├── param.java.ftl 入参实体类模板
├── service.java.ftl 服务接口类模板
├── serviceImpl.java.ftl 服务接口实现类模板
├── vo.java.ftl 返回实体类模板
└── gencode.setting 代码生成配置文件
配置项说明
mldong-generator/src/main/resources/gencode.setting
# 数据库配置
db.url=jdbc:mysql://172.16.31.160:3306/mldong-plus?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimeZone=UTT
db.username=root
db.password=8Eli#gr#AUk
# 作者
author=mldong
# 包名配置
packageParent=com.mldong.modules
# 基础包
basePackage=com.mldong
# 模块名
moduleName=sys
# 表名称
# 1.模糊查询以%结尾;
# 2.多张时使用英文逗号分割
tableName=sys_user,sys_role,sys_user_role,sys_menu,sys_role_menu,sys_dept,sys_post,sys_config,sys_dict,sys_dict_item
# 表前辍
tablePrefix=sys_
# 覆盖配置
# entity是否可覆盖
entityFileOverride=true
# mapper是否可覆盖
mapperFileOverride=false
# service是否可覆盖
serviceFileOverride=false
# controller是否可覆盖
controllerFileOverride=false
# param是否可覆盖
paramFileOverride=false
# pageParam是否可覆盖
pageParamFileOverride=false
# vo文件是否覆盖
voFileOverride=false
# 输出目录配置
# entity输出目录配置
entityOutPath=mldong-core/mldong-${moduleName}-core/src/main/java/com/mldong/modules/${moduleName}/entity
# param输出目录配置
paramOutPath=mldong-core/mldong-${moduleName}-core/src/main/java/com/mldong/modules/${moduleName}/dto
# pageParam输出目录配置
pageParamOutPath=mldong-core/mldong-${moduleName}-core/src/main/java/com/mldong/modules/${moduleName}/dto
# vo输出目录配置
voOutPath=mldong-core/mldong-${moduleName}-core/src/main/java/com/mldong/modules/${moduleName}/vo
# mapper输出目录配置
mapperOutPath=mldong-core/mldong-${moduleName}-core/src/main/java/com/mldong/modules/${moduleName}/mapper
# mapperXml输出目录配置
mapperXmlOutPath=mldong-core/mldong-${moduleName}-core/src/main/java/com/mldong/modules/${moduleName}/mapper/mapping
# service输出目录配置
serviceOutPath=mldong-core/mldong-${moduleName}-core/src/main/java/com/mldong/modules/${moduleName}/service
# serviceImpl输出目录配置
serviceImplOutPath=mldong-core/mldong-${moduleName}-core/src/main/java/com/mldong/modules/${moduleName}/service/impl
# controller输出目录配置
controllerOutPath=mldong-admin/src/main/java/com/mldong/modules/${moduleName}/controller
# 默认字段-param中会忽略不生成
defaultFields=createTime,createUser,updateTime,updateUser,isDeleted
开发阶段,主要修改以下三个配置:
- moduleName 模块名
- tableName 表名称,多个可用逗号分割,支持模糊查询,如sys_%等
- tablePrefix 表前辍
举个例子: 有如下表要生成代码:biz_table1、biz_table2、biz_table3 参考配置如下:
# 模块名
moduleName=biz
# 表名称
# 1.模糊查询以%结尾;
# 2.多张时使用英文逗号分割
tableName=biz_table1,biz_table2,biz_table3
# 表前辍
tablePrefix=biz_
一些注意事项
- 默认情况下,仅entity支持重复生成覆盖,如果其他模板也要覆盖,可自行配置。
- entity不建议人工修改,如果表结构变化了,可重新生成代码覆盖
- 其他模板都存在人工修改的可能,有争议的可能是
param.java.ftl
入参实体模板,因其默认是非覆盖策略,所以如果实体类重新生成了,部分字段可能需要人工调整。当然,如果确定未人工修改过,则可调整其覆盖策略。