跳到主要内容

Model Schema

简介

Flexmodel框架采用JSON格式定义模型,此文档为Schema定义描述。

对象配置

对象分为三种,ENTITYENUMNATIVE_QUERY,实体对应数据库物理表,ENUM为枚举类型,NATIVE_QUERY为本地查询。

对象包含以下公共属性:

属性类型可选属性描述
nameString对象名称
commentString注释
typeString对象类型
additionalPropertiesObject其他属性,可用于扩展

下文将介绍不通类型对象专有属性

实体描述

实体包含字段和索引两部分:

属性类型可选属性描述
fieldsArray字段列表
indexesArray索引列表
  1. 字段描述

目前支持以下类型:

名称描述
ID唯一标识符,通常用于区分不同记录。
STRING字符串类型,用于存储文本数据。
TEXT文本类型,适用于存储大量文本信息。
DECIMAL精确的小数类型,常用于财务数据。
INT整数类型,通常用于存储整数值。
BIGINT大整数类型,适用于存储超出标准整数范围的值。
BOOLEAN布尔类型,仅能存储真(true)或假(false)。
DATETIME日期时间类型,用于存储日期和时间信息。
DATE日期类型,仅用于存储日期,不包含时间。
JSONJSON格式,用于存储结构化数据。
ENUM枚举类型,定义一组有限的可能值。
RELATION关系类型,表示与数据的关联。

字段包含以下公共属性:

属性类型可选属性描述
nameString对象名称
commentString注释
typeString对象类型
uniqueBoolean是否唯一,默认值为false
nullableBoolean可为空,默认值为true
defaultValueAny默认值
additionalPropertiesObject其他属性,可用于扩展

以下为各种类型字段的专有属性:

ID

属性类型可选属性描述
generatedValueString可配置AUTO_INCREMENT|UUID|ULID|BIGINT_NOT_GENERATED|STRING_NOT_GENERATED,默认值为AUTO_INCREMENT

STRING

属性类型可选属性描述
lengthNumber长度,默认值为255

TEXT

属性类型可选属性描述

DECIMAL

属性类型可选属性描述
precisionNumber数据长度,默认值为20
scaleNumber小数长度,默认值为2

INT

属性类型可选属性描述

BIGINT

属性类型可选属性描述

BOOLEAN

属性类型可选属性描述

DATETIME

属性类型可选属性描述
generatedValueString生成当前日期时间,可配置NOW_ON_CREATE|NOW_ON_UPDATE|NOW_ON_CREATE_AND_UPDATE

DATE

属性类型可选属性描述
generatedValueString生成当前日期,可配置NOW_ON_CREATE|NOW_ON_UPDATE|NOW_ON_CREATE_AND_UPDATE

JSON

属性类型可选属性描述

ENUM

属性类型可选属性描述
multipleBoolean是否多条,默认值为false
fromString枚举从哪里来,从枚举定义中获取

RELATION

属性类型可选属性描述
multipleBoolean是否多条,默认值为false
fromString数据从哪里来,从实体定义中获取
localFieldString本地字段
foreignFieldString外键字段
cascadeDeleteBoolean级联删除,控制删除当前数据时是否删除关联数据,默认值为false
  1. 索引描述
属性父属性类型可选属性描述
name-String索引名称
unique-Boolean是否唯一,默认值false
fields-Array索引字段
fieldNamefields[n]Boolean字段名称
directionfields[n]String排序方式,ASC|DESC,默认值DESC

配置示例:

点击展开/折叠代码
[
{
"type": "ENTITY",
"name": "Student",
"fields": [
{
"name": "id",
"type": "ID",
"modelName": "Student",
"unique": false,
"nullable": true,
"generatedValue": "BIGINT_NOT_GENERATED"
},
{
"name": "studentName",
"type": "STRING",
"modelName": "Student",
"unique": false,
"nullable": true,
"length": 255
},
{
"name": "gender",
"type": "ENUM",
"from": "UserGender",
"multiple": false,
"modelName": "Student",
"unique": false,
"nullable": true
},
{
"name": "interest",
"type": "ENUM",
"from": "user_interest",
"multiple": true,
"modelName": "Student",
"unique": false,
"nullable": true
},
{
"name": "age",
"type": "INT",
"modelName": "Student",
"unique": false,
"nullable": true
},
{
"name": "classId",
"type": "BIGINT",
"modelName": "Student",
"unique": false,
"nullable": true
},
{
"name": "studentDetail",
"type": "RELATION",
"modelName": "Student",
"unique": false,
"nullable": true,
"multiple": false,
"from": "StudentDetail",
"localField": "id",
"foreignField": "studentId",
"cascadeDelete": true
}
],
"indexes": [
{
"modelName": "Student",
"name": "IDX_studentName",
"fields": [
{
"fieldName": "studentName",
"direction": "ASC"
}
],
"unique": false
}
]
},
{
"type": "ENTITY",
"name": "StudentDetail",
"fields": [
{
"name": "id",
"type": "ID",
"modelName": "StudentDetail",
"unique": false,
"nullable": true,
"generatedValue": "AUTO_INCREMENT"
},
{
"name": "studentId",
"type": "BIGINT",
"modelName": "StudentDetail",
"unique": false,
"nullable": true
},
{
"type": "RELATION",
"name": "student",
"comment": "班级",
"modelName": "StudentDetail",
"multiple": false,
"from": "Student",
"localField": "studentId",
"foreignField": "id",
"cascadeDelete": false
},
{
"name": "description",
"type": "TEXT",
"modelName": "StudentDetail",
"unique": false,
"nullable": true
}
]
},
{
"name": "UserGender",
"type": "ENUM",
"elements": [
"UNKNOWN",
"MALE",
"FEMALE"
],
"comment": "性别"
},
{
"name": "user_interest",
"type": "ENUM",
"elements": [
"chang",
"tiao",
"rap",
"daLanQiu"
],
"comment": "兴趣"
}
]

此段代码会生成模型如下:

Student:

名称类型
studentDetailStudentDetail
ageINT
idID
interestuser_interest[]
classIdBIGINT
studentNameSTRING
genderUserGender

StudentDetail:

名称类型
idID
studentIdBIGINT
studentStudent
descriptionTEXT

枚举描述

可支持建模选择枚举类型,可作为实体的枚举字段使用

属性类型可选属性描述
elementsArray枚举元素,字符串数组,只支持英文或者英文、数字、下划线组合

配置示例:

新增用户性别枚举,通过additionalProperties支持多语言

点击展开/折叠代码
{
"name": "UserGender",
"type": "ENUM",
"elements": [
"UNKNOWN",
"MALE",
"FEMALE"
],
"additionalProperties": {
"lang": {
"zh_CN": {
"UNKNOWN": "未知",
"MALE": "男",
"FEMALE": "女"
},
"en_US": {
"UNKNOWN": "Unknown",
"MALE": "Male",
"FEMALE": "Female"
}
}
}
}

本地查询描述

用于支持建模没办法实现的复杂查询,比较灵活,缺点是跨数据库移植性较差。

属性类型可选属性描述
statementString语句

配置示例:

查询用户根据性别分组查询

点击展开/折叠代码
{
"name": "分组查询",
"type": "NATIVE_QUERY",
"statement": "select count(id) as total, gender, max(age) as ageSum from Student group by gender"
}