飞布产品手册
官网B站Github
V1.0
V1.0
  • 序言
  • 更新日志
  • 产品简介
    • 什么是飞布?
    • 飞布的价值
    • 飞布的优势
    • 应用场景
    • 数据安全
    • 产品案例
  • 快速入门
    • 初识飞布
    • 快速上手
      • 图文版
    • 词汇概览
    • 工作原理
  • 基础-可视化开发
    • 概览
      • CLI
      • 控制台
        • 主功能区
    • 数据源
      • 数据库
        • 数据库连接
          • 高级设置
        • 数据建模
        • 数据预览
      • REST 数据源
      • GraphQL 数据源
      • 消息队列
    • API构建
      • 可视化构建
        • API规范
      • 批量新建
      • HTTP请求流程指令
      • 使用API
      • 实时查询
      • 实时推送
      • 关联查询
      • 数据缓存
      • 常见用例
    • 身份验证
      • 授权码模式
        • 身份验证(废弃)
      • 隐式模式
      • 数据权限控制
    • 身份授权
      • RBAC
        • 授权与访问控制(废弃)
      • 接口权限控制
      • 开放API
    • 文件存储
      • S3配置及使用
      • 文件管理面板
      • 高级配置:profile
  • 进阶-钩子机制
    • 钩子概览
    • 启动钩子
      • Node钩子
      • Golang钩子
      • Python钩子
      • Java钩子
    • OPERATION钩子
    • 身份验证钩子
    • graphql钩子
    • 函数钩子
      • functions(废弃)
      • proxys(废弃)
    • 文件上传钩子
    • 内部调用
  • 使用-部署上线
    • 部署运维
      • 手动部署
        • 流水线部署(废弃)
      • Docker部署
      • 飞布云
    • 接口安全
      • CSRF token 保护
      • 跨域访问
    • 客户端SDK
      • 微信小程序SDK
      • Flutter SDK
      • uniapp SDK
  • 环境准备
    • 文件存储 S3
    • 身份认证 OIDC
    • NodeJs环境
  • 实战案例
    • Fireboom Admin
      • 管理后台-refine(废弃)
    • 实时TODO LIST
    • 语音版ChatGPT
    • AI魔法师实战
    • 阿里低代码引擎
  • 路线图
  • 常见问题
  • 核心概念
    • GraphQL
    • 超图
    • 请求时序图
    • 服务端Operation
  • 二次开发
    • 钩子规范
      • 钩子规范bak
    • 模板规范
    • 自定义模板
    • 其它参考
由 GitBook 提供支持
在本页

这有帮助吗?

在GitHub上编辑
  1. 二次开发

自定义模板

Java生成对象定义

  1. json结构说明

// objectField
{
    "name": "TodoInput", // 对象/字段名
    "typeName": "object", // 字段类型名(integer/number/boolean/string/object/enum)
    "typeRefObject": ${objectField}, // 字段类型引用对象
    "typeRefEnum": ${enumField}, // 字段类型引用枚举
    "required": false, // 字段是否必须
    "isArray": false, // 字段类型是否数组
    "isDefinition": false, // 对象是否全局定义(orderBy, query这些数据库内省的)
    "documentPath": ["TodoInput"], // 文档路径(建议拼接后用来做对象名/字段类型名)
    "fields": [${objectField}], // 对象字段列表
    "root": "Input", // 顶层归属类型(Input/InternalInput/ResponseData/Definitions)
    "opeartionInfo": ${opeartionInfo} // 对应operation信息
}

// enumField
{
    "name": "DictValueType", // 枚举名称
    "values": ["site"] // 枚举值列表
}

// operationInfo
{
    "name": "Todo", // oeprationName
    "path": "Todo", // opeartionPath
    "IsInternal": false, // 是否内部
    "isLiveQuery": false, // 是否实时查询
    "isQuery": true, // 是否查询
    "isMutation": false, // 是否变更
    "isSubscription": false // 是否订阅
}
  1. 定义对象类型

<!-- golang生成struct使用示例 -->
{{#each objectFieldArray}}
<!-- 使用documentPath拼接'_'对象名称 -->
type {{upperFirst (joinString '_' documentPath)}} struct {
    <!-- 遍历字段列表 -->
    {{#each fields}}
    <!-- 字段名首字母大写,并判断类型是否为数组 -->
    {{upperFirst (trimPrefix name '_')}} {{#if isArray}}[]{{~/if~}}
    {{~#if typeRefObject~}}
        <!-- 使用关联对象的documentPath拼接作为类型名称 -->
        {{#if typeRefObject.isDefinition}}*{{/if}}{{~upperFirst (joinString '_' typeRefObject.documentPath)~}}
    {{~else~}}
        {{~#if typeRefEnum~}}
            <!-- 使用关联枚举的name并大写首字母作为类型名称 -->
            {{~upperFirst typeRefEnum.name~}}
        {{~else~}}
            <!-- 普通类型做类型转换 -->
            {{~#equal typeName 'string'}}string{{/equal~}}
            {{~#equal typeName 'integer'}}int64{{/equal~}}
            {{~#equal typeName 'number'}}float64{{/equal~}}
            {{~#equal typeName 'boolean'}}bool{{/equal~}}
            {{~#equal typeName 'json'}}any{{/equal~}}
        {{~/if}}
    <!-- 到处使用字段名导出json,并判断字段是否必须 -->
    {{~/if}} `json:"{{name}}{{#unless required}},omitempty{{/unless}}"`
    {{/each}}
}
{{/each}}

<!-- typescript生成对象使用示例 -->
{{#each objectFieldArray}}
export interface {{joinString '_' documentPath}} {
    {{#each fields}}
    {{name}}{{#unless required}}?{{/unless}}:
    {{~#if typeRefObject~}}
        {{~joinString '_' typeRefObject.documentPath~}}
    {{~else~}}
        {{~#if typeRefEnum~}}
            {{~typeRefEnum.name~}}
        {{~else~}}
            {{~#equal typeName 'string'}}string{{/equal~}}
            {{~#equal typeName 'integer'}}number{{/equal~}}
            {{~#equal typeName 'number'}}number{{/equal~}}
            {{~#equal typeName 'boolean'}}boolean{{/equal~}}
            {{~#equal typeName 'json'}}any{{/equal~}}
        {{~/if}}
    {{~/if}}{{#if isArray}}[]{{~/if~}},
    {{/each}}
}
{{/each}}
  1. 定义枚举类型

<!-- 示例为生成go的枚举【go没有枚举类型,使用别名实现】-->
{{#each enumFieldArray}}
<!-- 枚举名首字母大写 -->
type {{upperFirst name}} string
const (
    {{#each values}}
    <!-- 遍历枚举值列表,使用枚举名作为前缀 -->
    {{upperFirst name}}_{{this}} {{upperFirst name}} = "{{this}}"
    {{/each}}
)
{{/each}}

<!-- 示例为生成typescript的枚举-->
{{#each enumFieldArray}}
enum {{name}} {
    {{#each values}}
    '{{this}}',
    {{/each}}
}
{{/each}}
  1. 单对象模版生成多个文件(以java为例)

<!-- ${objectFieldArray}.java.hbs (对象文件名必须以${objectFieldArray}开头) -->
package com.fireboom.entity.{{root}};

import lombok.Data;

<!-- <#fileName#>标签用来标识文件名【支持路径】用来替换${objectFieldArray} -->
// <#fileName#>{{root}}/{{upperFirst (joinString '_' documentPath)}}<#fileName#>
@Data
public class {{upperFirst (joinString '_' documentPath)}} {
    public {{upperFirst (joinString '_' documentPath)}}(
    {{~#each fields}}
        {{~> field_type_java this}} {{name}}{{#unless @last}}, {{/unless~}}
    {{/each~}}
    ) {
        {{#each fields}}
        this.{{name}} = {{name}};
        {{/each}}
    }
    {{#each fields}}
    private {{> field_type_java this}} {{name}};
    {{/each}}
}

<!-- field_type_java.hbs片段函数用来定义字段类型【多处使用,提取片段】 -->
{{#if isArray}}java.util.List<{{~/if~}}
{{~#if typeRefObject~}}
    com.fireboom.entity.{{root}}.{{~upperFirst (joinString '_' typeRefObject.documentPath)~}}
    {{~else~}}
    {{~#if typeRefEnum~}}
        com.fireboom.entity.enums.{{~upperFirst typeRefEnum.name~}}
    {{~else~}}
        {{~#equal typeName 'string'}}String{{/equal~}}
        {{~#equal typeName 'integer'}}Integer{{/equal~}}
        {{~#equal typeName 'number'}}Double{{/equal~}}
        {{~#equal typeName 'boolean'}}Boolean{{/equal~}}
        {{~#equal typeName 'json'}}com.alibaba.fastjson.JSON{{/equal~}}
    {{~/if~}}
{{~/if~}}
{{#if isArray}}>{{~/if~}}
  1. 单枚举模板生成多个文件(以java为例)

<!-- ${enumFieldArray}.java.hbs (枚举文件名必须以${enumFieldArray}开头) -->
package com.fireboom.entity.enums;

import lombok.Getter;

<!-- <#fileName#>标签用来标识文件名【支持路径】用来替换${enumFieldArray} -->
// <#fileName#>enums/{{upperFirst name}}<#fileName#>
public enum {{upperFirst name}} {
    {{#each values}}
    {{this}}("{{this}}"){{#if @last}};{{else}},{{/if}}
    {{/each}}

    @Getter
    private final String value;

    {{upperFirst name}}(String value) {
        this.value = value;
    }
}
  1. 生成文件示例

上一页模板规范

最后更新于1年前

这有帮助吗?

10KB
test.go
GOLANG 结构体示例
5KB
test.ts
Typescript 对象示例
12KB
Java对象(多文件).zip
archive
Java 对象示例