Skip to content

Koala Code Gen Starter

考拉代码生成启动模块

集成了数据库模块模板模块全部功能, 实现了从数据库表到代码的生成过程

快速开始

初始化

请先参照快速开始初始化数据库

配置

根据实际情况, 进行参数配置:

yaml
koala:
  code-gen:
    # 生成代码的包名
    package-name: cn.koala.test
    # 表前缀
    table-prefix: t_
    # 下载路径
    download-path: /tmp/koala/code
koala:
  code-gen:
    # 生成代码的包名
    package-name: cn.koala.test
    # 表前缀
    table-prefix: t_
    # 下载路径
    download-path: /tmp/koala/code

JVM参数

enjoy中使用java.util等相关内容, 需要增加jvm参数: --add-opens java.base/java.util=ALL-UNNAMED

接口文档

实现了数据库管理/模板管理/代码生成接口, 可通过访问接口文档查看具体信息

接口文档地址: http://127.0.0.1:4200/swagger-ui.html

进阶

核心逻辑

mermaid
flowchart LR
	数据库表 --代码生成上下文处理器--> 代码生成上下文 --代码生成器 --> 代码
flowchart LR
	数据库表 --代码生成上下文处理器--> 代码生成上下文 --代码生成器 --> 代码

上下文加工器

上下文加工器用于数据库表加工为代码生成所需的上下文, 系统内置的处理器提供如下数据:

键值类型描述
table表对象数据库表对象
package字符串Java项目包名, 对应配置koala.code-gen.package-name
name名称对象截取前缀配置koala.code-gen.table-prefix后的领域名称, 例如: User
description字符串领域描述, 依据表备注生成, 例如: 用户
id领域属性对象主键的领域属性对象
properties领域属性对象列表领域属性对象列表
entity实体代码生成上下文对象实体代码生成上下文对象

表对象

键值类型描述
name字符串数据库表名称, 例如: t_user
remarks字符串数据库表备注, 例如: 用户表
columns列对象集合数据库列对象集合

列对象

键值类型描述
name字符串数据库列名称, 例如: id
type整型数据库列的JDBC类型
size整型数据库列长度, 例如: 100
decimalDigits整型数据库列精度, 例如: 6
remarks字符串数据库列备注, 例如: 用户表
isNullable布尔值数据库列是否允许为空, 例如: true
isAutoincrement布尔值数据库列是否自增, 例如: true
isPrimaryKey布尔值数据库列是否为主键, 例如: true

领域属性对象

键值类型描述
name名称对象领域属性名称, 例如: sortIndex
description字符串领域属性描述, 例如: 排序索引
type字符串字典领域类型字典, 例如: { 'java': 'Long', 'json': 'number' }

名称对象

键值类型描述
pascal名称风格对象大驼峰
camel名称风格对象小驼峰
kebab名称风格对象短横风
snake名称风格对象下划线

名称风格对象

键值类型描述
singular字符串单数格式字符串, 例如: user
plural字符串复数格式字符串, 例如: users

实体上下文对象

键值类型描述
isAbstract布尔值是否继承抽象类
validations校验对象字典校验对象字典, 例如: { 'sortIndex': [ ... ] }

校验对象字典

键值类型描述
name字符串校验名称, 例如: NotNull
parameters字符串字典校验参数字典, 例如: { 'max': 10 }
message字符串校验信息, 例如: 排序索引不能为空
groups字符串集合校验分组列表, 例如: [ 'Create', 'Update' ]

如上述内容不满足需求, 可通过实现接口ContextProcessor来创建自定义上下文处理器:

java
public class MyContextProcessor implements CodeGenContextProcessor {

  @Override
  public CodeGenContext process(DatabaseTable table) {
    // 构建代码生成上下文逻辑...
  }
}
public class MyContextProcessor implements CodeGenContextProcessor {

  @Override
  public CodeGenContext process(DatabaseTable table) {
    // 构建代码生成上下文逻辑...
  }
}

自定义代码生成器

可通过实现代码生成器接口 CodeGenerator 自定义代码生成器:

java
@Component
public class MyCodeGenerator implements CodeGenerator {

  @Override
  public CodeGenResult generate(DatabaseTable table, Template template) {
    // 代码生成逻辑
  }
}
@Component
public class MyCodeGenerator implements CodeGenerator {

  @Override
  public CodeGenResult generate(DatabaseTable table, Template template) {
    // 代码生成逻辑
  }
}

系统内置了如下代码生成器:

  • TemplateEngineCodeGenerator: 基于模板引擎的代码生成器, 默认使用Enjoy模板引擎, 可通过替换 TemplateRenderer 更换模板引擎

自定义模板

可以通过集成的模板管理功能创建自定义模板, 例如新增一个Python的代码模板:

python
import UserRepository as repository

def add(#(name)Entity):
    repository.add(#(name)Entity)
import UserRepository as repository

def add(#(name)Entity):
    repository.add(#(name)Entity)

模板支持多级路径生成, 假设目录结构如下:

apis
 |--Api.java
 |--ApiImpl.java
apis
 |--Api.java
 |--ApiImpl.java

可以将模板文件名称设置为api/#(name.pascal.singular)Api.java