大部分项目里其实有很多代码都是重复的,几乎每个基础模块的代码都有增删改查的功能,而这些功能都是大同小异, 如果这些功能都要自己去写,将会大大浪费我们的精力降低效率。所以这种重复性的代码可以使用代码生成。

使用方式

  1. 修改代码生成配置

编辑 ./config/config.toml


# Gen
[gen]
    author        = "gfast"  #作者
    moduleName    = "system" #默认模块
    packageName   = "gfast/app/system" #默认包路径
    autoRemovePre = true   #是否自动删除表前缀
    tablePrefix   = "table_,qxkj_"   #表前缀(配置后生成的文件将忽略前缀)
    templatePath  = "./template/vm"  #代码生成模板路径
    frontDir = "F:/tools/webProject/gfast-ui" #前端路径(配置您自己的前端路径,用于将代码生成到前端对应位置)
  1. 新建数据库表结构

2.1 单表

# 班级表
CREATE TABLE `demo_gen_class` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '分类id',
  `class_name` varchar(30) NOT NULL DEFAULT '' COMMENT '分类名',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='代码生成关联测试表';

# 人员表(学生表)
CREATE TABLE `demo_gen` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `demo_name` varchar(20) NOT NULL DEFAULT '' COMMENT '姓名',
  `demo_age` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '年龄',
  `classes` varchar(30) NOT NULL DEFAULT '' COMMENT '班级',
  `demo_born` datetime DEFAULT NULL COMMENT '出生年月',
  `demo_gender` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '性别',
  `created_at` datetime DEFAULT NULL COMMENT '创建日期',
  `updated_at` datetime DEFAULT NULL COMMENT '修改日期',
  `deleted_at` datetime DEFAULT NULL COMMENT '删除日期',
  `created_by` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '创建人',
  `updated_by` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '修改人',
  `demo_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态',
  `demo_cate` varchar(30) NOT NULL DEFAULT '' COMMENT '分类',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='代码生成测试表';

以上两个表的关系是:班级表中的id 与 学生表中的classes是一对多关系,在添加学生信息的时候可以选择对应的班级。

2.2 树表

CREATE TABLE `demo_gen_tree` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `parent_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '父级ID',
  `demo_name` varchar(20) NOT NULL DEFAULT '' COMMENT '姓名',
  `demo_age` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '年龄',
  `classes` varchar(30) NOT NULL DEFAULT '' COMMENT '班级',
  `demo_born` datetime DEFAULT NULL COMMENT '出生年月',
  `demo_gender` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '性别',
  `created_at` datetime DEFAULT NULL COMMENT '创建日期',
  `updated_at` datetime DEFAULT NULL COMMENT '修改日期',
  `deleted_at` datetime DEFAULT NULL COMMENT '删除日期',
  `created_by` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '创建人',
  `updated_by` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '修改人',
  `demo_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态',
  `demo_cate` varchar(30) NOT NULL DEFAULT '' COMMENT '分类',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='代码生成树形结构测试表';

树表中 idparent_id 对应父子关系(字段名不限制)

  1. 登录系统(系统工具 -> 代码生成 -> 导入对应表)

  1. 代码生成列表中找到需要表(可预览、修改、删除生成配置)

4.1 配置字段属性
配置对应的字段类型,字典选项,关联表字段。

4.2 配置基本信息

4.3 配置生成信息

  1. 预览生成代码

  2. 确定没有问题后可直接生成代码

    生成代码后若需重新生成,只有 model 和 dao_internal会自动覆盖,其他文件不会重新生成,若要重新生成请删除已生成的文件后再次生成,若需重新生成菜单需要把已生成的菜单删除并删除/data/gen_sql中对应的sql文件,生成后重启前后端服务即可。
    如果是关联表需要先生成主表再生成附表或者批量同时生成,例如上面的例子需要先生成班级表,再生成学生表这样在添加学生信息时才能选择班级。

第一次生成非system模块代码后,需要在/router/router.go文件中导入模块路由。 已更新自动注册模块路由功能,不再需要手动添加。

代码生成后,若修改了表信息重新生成,需要在代码生成列表页重新导入数据表生成。

视频演示

https://www.bilibili.com/video/BV1i64y1e755

作者:管理员  创建时间:2023-01-09 17:16
最后编辑:管理员  更新时间:2023-01-09 17:18