目录

一、代码生成器概述

二、核心表结构设计

三、核心功能实现流程

1. 数据库表查询功能

2. 表结构导入功能

3. 代码生成功能

四、配置优化技巧


本文介绍了一个代码生成器系统的设计与实现。系统通过自动化生成前后端代码来提高开发效率,包含两大功能模块:业务表结构管理和代码生成功能。核心表结构采用gen_table和gen_table_column两张表存储元数据信息。文章详细说明了数据库表查询、表结构导入和代码生成三个核心功能的实现流程,包括前后端代码示例。最后提供了generator.yml的配置优化示例,包含作者信息、包名、前缀处理等参数设置。该系统能显著减少重复编码工作,提升开发效率。

一、代码生成器概述

代码生成器是提高开发效率的核心工具,通过自动化生成前后端代码,显著减少重复性编码工作。系统主要分为两大功能模块:

  1. 业务表结构管理:支持表结构的导入、预览、编辑、删除和同步

  2. 代码生成功能:基于表结构自动生成对应的前后端代码,并提供下载

二、核心表结构设计

系统采用两张核心表存储代码生成相关的元数据信息:

-- 业务表基本信息表
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_

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐