第二章 【若依框架:代码生成器】代码生成器原理与实现
·
目录
本文介绍了一个代码生成器系统的设计与实现。系统通过自动化生成前后端代码来提高开发效率,包含两大功能模块:业务表结构管理和代码生成功能。核心表结构采用gen_table和gen_table_column两张表存储元数据信息。文章详细说明了数据库表查询、表结构导入和代码生成三个核心功能的实现流程,包括前后端代码示例。最后提供了generator.yml的配置优化示例,包含作者信息、包名、前缀处理等参数设置。该系统能显著减少重复编码工作,提升开发效率。
一、代码生成器概述
代码生成器是提高开发效率的核心工具,通过自动化生成前后端代码,显著减少重复性编码工作。系统主要分为两大功能模块:
-
业务表结构管理:支持表结构的导入、预览、编辑、删除和同步
-
代码生成功能:基于表结构自动生成对应的前后端代码,并提供下载
二、核心表结构设计
系统采用两张核心表存储代码生成相关的元数据信息:
-- 业务表基本信息表
gen_table:
table_id 主键ID
table_name 表名称
table_comment 表注释
class_name 实体类名称
...
-- 业务表字段信息表
gen_table_column:
column_id 主键ID
table_id 外键关联gen_table
column_name 字段名称
column_comment 字段注释
java_type Java类型
java_field Java字段名
...
三、核心功能实现流程
1. 数据库表查询功能
前端实现:
// 打开导入表弹窗
function openImportTable() {
proxy.$refs["importRef"].show();
}
后端实现:
@GetMapping("/db/list")
public TableDataInfo dataList(GenTable genTable) {
startPage();
List<GenTable> list = genTableService.selectDbTableList(genTable);
return getDataTable(list);
}
2. 表结构导入功能
前端实现:
function handleImportTable() {
const tableNames = tables.value.join(",");
if (tableNames == "") {
proxy.$modal.msgError("请选择要导入的表");
return;
}
importTable({ tables: tableNames }).then(res => {
proxy.$modal.msgSuccess(res.msg);
if (res.code === 200) {
visible.value = false;
emit("ok");
}
});
}
后端实现:
@PostMapping("/importTable")
public AjaxResult importTableSave(String tables) {
String[] tableNames = Convert.toStrArray(tables);
List<GenTable> tableList = genTableService.selectDbTableListByNames(tableNames);
genTableService.importGenTable(tableList, SecurityUtils.getUsername());
return success();
}
3. 代码生成功能
前端实现:
function handleGenTable(row) {
const tbNames = row.tableName || tableNames.value;
if (tbNames == "") {
proxy.$modal.msgError("请选择要生成的数据");
return;
}
if (row.genType === "1") {
genCode(row.tableName).then(response => {
proxy.$modal.msgSuccess("成功生成到自定义路径:" + row.genPath);
});
} else {
proxy.$download.zip("/tool/gen/batchGenCode?tables=" + tbNames, "framework.zip");
}
}
后端实现:
@GetMapping("/batchGenCode")
public void batchGenCode(HttpServletResponse response, String tables) throws IOException {
String[] tableNames = Convert.toStrArray(tables);
byte[] data = genTableService.downloadCode(tableNames);
genCode(response, data);
}
四、配置优化技巧
generator.yml配置示例:
gen:
author: developer
packageName: com.example.manage
autoRemovePre: true
tablePrefix: sys_,tb_
更多推荐


所有评论(0)