## 代码生成 目录 - 使用条件 - 生成配置 - 一个生成增删改查列表例子 - 内置gf-cli - 自定义生成模板 > 在HotGo中可以通过后台开发工具快速的一键生成CRUD,自动生成Api、控制器、业务逻辑、Web页面、表单组件、菜单权限等。 ### 使用条件 - hotgo 版本号 >= 2.2.10 - 使用前必须先看 [数据库](sys-db.md) #### 增删改查列表 - 表自增长字段为 `id` #### 关系树列表 - 表自增长字段为 `id` ### 生成配置 - 注意:线上环境务必将allowedIPs参数设为空,考虑到项目安全问题请勿线上生成使用! ```yaml hggen: allowedIPs: ["127.0.0.1", "*"] # 白名单,*代表所有,只有允许的IP后台才能使用生成代码功能 selectDbs: [ "default" ] # 可选生成表的数据库配置名称,支持多库 disableTables : ["hg_sys_gen_codes","hg_admin_role_casbin"] # 禁用的表,禁用以后将不会在选择表中看到 delimiters: ["@{", "}"] # 模板引擎变量分隔符号 # 生成应用模型,所有生成模板允许自定义,可以参考default模板进行改造 application: # CRUD模板 crud: templates: # 默认的主包模板 - group: "default" # 分组名称 isAddon: false # 是否为插件模板 false|true masterPackage: "sys" # 主包名称,需和controllerPath、logicPath、inputPath保持关联 templatePath: "./resource/generate/default/curd" # 模板路径 apiPath: "./api/admin" # gfApi生成路径 controllerPath: "./internal/controller/admin/sys" # 控制器生成路径 logicPath : "./internal/logic/sys" # 主要业务生成路径 inputPath: "./internal/model/input/sysin" # 表单过滤器生成路径 routerPath : "./internal/router/genrouter" # 生成路由表路径 sqlPath : "./storage/data/generate" # 生成sql语句路径 webApiPath: "../web/src/api" # webApi生成路径 webViewsPath : "../web/src/views" # web页面生成路径 # 默认的插件包模板 - group: "addon" # 分组名称 isAddon: true # 是否为插件模板 false|true masterPackage: "sys" # 主包名称,需和controllerPath、logicPath、inputPath保持关联 templatePath: "./resource/generate/default/curd" # 模板路径 apiPath: "./addons/{$name}/api/admin" # gfApi生成路径 controllerPath: "./addons/{$name}/controller/admin/sys" # 控制器生成路径 logicPath : "./addons/{$name}/logic/sys" # 主要业务生成路径 inputPath: "./addons/{$name}/model/input/sysin" # 表单过滤器生成路径 routerPath : "./addons/{$name}/router/genrouter" # 生成路由表路径 sqlPath : "./storage/data/generate/addons" # 生成sql语句路径 webApiPath: "../web/src/api/addons/{$name}" # webApi生成路径 webViewsPath : "../web/src/views/addons/{$name}" # web页面生成路径 # 关系树列表模板 tree: templates: - group: "default" templatePath: "./resource/generate/default/tree" # 消息队列模板 queue: templates: - group: "default" templatePath: "./resource/generate/default/queue" # 定时任务模板 cron: templates: - group: "default" templatePath: "./resource/generate/default/cron" ``` ### 一个生成增删改查列表例子 - 推荐使用热编译方式启动HotGo,这样生成完成页面自动刷新即可看到新生成内容,无需手动重启 - 服务端热编译启动:`gf run main.go`, web前端启动:`yarn dev` 1、创建数据表 1.1 创建测试表格表`hg_test_table`: ```mysql CREATE TABLE `hg_test_table` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `category_id` bigint(20) NOT NULL COMMENT '分类ID', `title` varchar(64) NOT NULL COMMENT '标题', `description` varchar(255) NOT NULL COMMENT '描述', `content` text NOT NULL COMMENT '内容', `image` varchar(255) DEFAULT NULL COMMENT '单图', `attachfile` varchar(255) DEFAULT NULL COMMENT '附件', `city_id` bigint(20) DEFAULT '0' COMMENT '所在城市', `switch` int(11) DEFAULT '1' COMMENT '显示开关', `sort` int(11) NOT NULL COMMENT '排序', `status` tinyint(1) DEFAULT '1' COMMENT '状态', `created_by` bigint(20) DEFAULT '0' COMMENT '创建者', `updated_by` bigint(20) DEFAULT '0' COMMENT '更新者', `created_at` datetime DEFAULT NULL COMMENT '创建时间', `updated_at` datetime DEFAULT NULL COMMENT '修改时间', `deleted_at` datetime DEFAULT NULL COMMENT '删除时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='测试表格'; ``` 1.2 测试分类表`hg_test_category`: - 注意:该表为了方便功能演示已经内置无需再次创建,此处提示表结构只是为了方便大家梳理关联表关系 ```mysql CREATE TABLE `hg_test_category` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '分类ID', `name` varchar(255) NOT NULL COMMENT '分类名称', `description` varchar(255) DEFAULT NULL COMMENT '描述', `sort` int(11) NOT NULL COMMENT '排序', `remark` varchar(255) DEFAULT NULL COMMENT '备注', `status` tinyint(1) DEFAULT '1' COMMENT '状态', `created_at` datetime DEFAULT NULL COMMENT '创建时间', `updated_at` datetime DEFAULT NULL COMMENT '修改时间', `deleted_at` datetime DEFAULT NULL COMMENT '删除时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COMMENT='测试分类'; ``` 1.3 插入测试数据 ```mysql INSERT INTO `hg_test_table` (`id`, `category_id`, `title`, `description`, `content`, `image`, `attachfile`, `city_id`, `switch`, `sort`, `status`, `created_by`, `updated_by`, `created_at`, `updated_at`, `deleted_at`) VALUES (1, 1, '测试标题', '描述', '