模型字段规范
配置注解
模型类必需使用@Model注解来标识当前类为模型类。
可以使用@Model.model、@Fun注解模型的模型编码(也表示命名空间),先取@Model.model注解值,若为空则取@Fun注解值,若皆为空则取全限定类名。
使用@Model.model注解配置模型编码,模型编码唯一标识一个模型。
请勿使用Query和Mutation作为模型编码和技术名称的结尾。
更多Model的详细元数据描述介绍参见模型元数据详解
模型命名规范
模型属性 | 默认取值规范 | 命名规则规范 |
---|---|---|
name | 默认取model.model的点分割最后一位 | 1. 使用大驼峰命名法 2. 仅支持数字、字母 3. 必须以字母开头 4. 长度必须小于等于128个字符 |
module | 无默认值开发人员定义规范示例:{项目名称}_{模块功能示意名称} | 1. 使用下划线命名法 2. 仅支持数字、大写或小写字母、下划线 3. 必须以字母开头4. 不能以下划线结尾 5. 长度必须小于等于128个字符 |
model | 默认使用全类名,取lname的值开发人员定义规范示例:{项目名称}.{模功能示意名称}.{简单类名} | 1. 仅支持数字、字母、点 2. 必须以字母开头 3. 不能以点结尾 4. 长度必须小于等于128个字符 |
displayName | 空字符串 | 1. 长度必须小于等于128个字符 |
lname | 符合java命名规范,真实的java全类名,无法指定,要符合model的约束,即为包名+类名 | lname是不能定义的,为全类名:包名+类名,和model一样的校验规则:包名和类名的校验 |
summary | 默认使用displayName属性 | 1. 不能使用分号 2. 长度必须小于等于128个字符 |
descripition | NULL,注解无法定义 | 1. 长度必须小于等于65535个字符 |
table | 默认使用name字段生成表名时,table字段的命名规则约束同样生效(大小驼峰命名转为下划线分割的表名称) | 1. 仅支持数字、字母、下划线 2. 长度必须小于等于128个字符(此限制为系统存储约束,与数据库本身无关) |
type | java属性类型与数据库存储类型可执行转换即可 | ModelTypeEnum枚举值 |
字段命名规范
字段属性 | 默认取值规范 | 命名规则规范 |
---|---|---|
name | 默认使用java属性名 | 1. 仅支持数字、字母 2. 必须以小写字母开头 3. 长度必须小于等于128个字符 |
field | 默认使用java属性名 | 与name使用相同命名规则约束 |
displayName | 默认使用name属性 | 1. 长度必须小于等于128个字符 |
lname | 使用java属性名,符合java命名规范,真实的属性名称,无法指定 | 与name使用相同命名规则约束 |
column | 列名为属性名的小驼峰转下划线格式 | 1. 仅支持数字、字母、下划线 2. 长度必须小于等于128个字符(此限制为系统存储约束,与数据库本身无关) |
summary | 默认使用displayName属性 | 1. 不能使用分号 2. 长度必须小于等于500个字符 |
模型继承规范
继承方式
继承方式可以分为五种:
- 抽象基类ABSTRACT,只保存不希望为每个子模型重复键入的信息的模型,抽象基类模型不生成数据表存储数据,只供其他模型继承模型可继承域使用,抽象基类可以继承抽象基类。
- 扩展继承EXTENDS,子模型与父模型的数据表相同,子模型继承父模型的字段与函数。存储模型之间的继承默认为扩展继承。
- 多表继承MULTI_TABLE,父模型不变,子模型获得父模型的可继承域生成新的模型;父子模型不同表,子模型会建立与父模型的一对一关联关系字段(而不是交叉表),使用主键关联,同时子模型会通过一对一关联关系引用父模型的所有字段。多表继承父模型需要使用@Model.MultiTable来标识,子模型需要使用@Model.MultiTableInherited来标识。
- 代理继承PROXY,为原始模型创建代理,可以增删改查代理模型的实体数据,就像使用原始(非代理)模型一样。不同之处在于代理继承并不关注更改字段,可以更改代理中的元信息、函数和动作,而无需更改原始内容。一个代理模型必须仅能继承一个非抽象模型类。一个代理模型可以继承任意数量的没有定义任何模型字段的抽象模型类。一个代理模型也可以继承任意数量继承相同父类的代理模型。
-
临时继承TRANSIENT,将父模型作为传输模型使用,并可以添加传输字段。
继承约束
https://shushi.yuque.com/yoxz76/oio3/spuu6y
通用约束
对于扩展继承,查询的时候,父模型只能查询到父模型字段的数据,子模型可以查询出父模型及子模型的字段数据(因为派生关系所以子模型复刻了一份父模型的字段到子模型中)。
系统不会为抽象基类创建实际的数据库表,它们也没有默认的数据管理器,不能被实例化也无法直接保存,它们就是用来被继承的。抽象基类完全就是用来保存子模型们共有的内容部分,达到重用的目的。当它们被继承时,它们的字段会全部复制到子模型中。
系统不支持非jar包依赖模型的继承。
多表继承具有阻断效应,子模型无法继承多表继承父模型的存储父模型的字段,需要使用@Model.Advanced注解的inherited属性显示声明继承父模型的父模型。但是可以继承多表继承父模型的抽象父模型的字段。
可以使用@Model.Advanced的unInheritedFields和unInheritedFunctions属性设置不从父类继承的字段和函数。跨模块继承约束
如果模型间的继承是跨模块继承,应该与模型所属模块建立依赖关系;如果模块间有互斥关系,则不允许建立模块依赖关系,同理模型间也不允许存在继承关系。
跨模块代理继承,对代理模型的非inJvm函数调用将使用远程调用方式;跨模块扩展(同表)继承将使用本地调用方式,如果是数据管理器函数,将直连数据源。模型类型与继承约束
- 抽象模型可继承:抽象模型(Abstract)
- 临时模型可继承:抽象模型(Abstract)、传输模型(Transient)
- 存储模型可继承:抽象模型(Abstract)、存储模型(Store)、存储模型(多表,Multi-table Store),不可继承多个Store或Multi-table Store
- 多表存储模型(父)可继承:同扩展继承
- 多表存储模型(子)在继承单个Multi-table Store后可继承:抽象模型(Abstract)、存储模型(Store),不可继承多个Store
-
代理模型可继承:
- 抽象模型(Abstract),须搭配继承Store、Multi-table Store或Proxy
- 存储模型(Store),不可继承多个Store或Multi-table Store
- 存储模型(多表,Multi-table Store),不可继承多个Store或Multi-table Store
- 代理模型(Proxy),可继承多个Proxy,但多个父Proxy须继承自同一个Store或Multi-table Store,且不能再继承其他Store或Multi-table Store
同名字段以模型自身字段为有效配置,若模型自身不存在该字段,继承字段以第一个加载的字段为有效配置,所以在多重继承的情况下,未避免继承同名父模型字段的不确定性,在自身模型配置同名字段来确定生效配置。
字段序列化方式
字段序列化注意点
- 必须使用Field#store属性将字段存储设置为NullableBoolEnum.TRUE。
- 使用Field#serialize属性指定序列化方式,默认为JSON。
- 如把PetItemDetail设置为存储模型,须在PetItem的petItemDetails字段上使用Field.Relation#store属性将关联关系存储设置为false。不然会同时存储petItemDetails字段和对应的PetItemDetail表记录
字段序列化方式说明
序列化方式 说明 备注 JSON JSON序列化 主要用于模型相关类型字段的序列化,是@Field.serialize默认选项 DOT 点拼接集合元素 COMM 逗号拼接集合元素 BIT 按位与,2次幂数求和 非@Field.serialize可选项列表,用于二进制枚举序列化不需要配置,由oinone自动推断
函数命名规范
模型属性 | 默认取值规范 | 命名规则规范 |
---|---|---|
namespace | 先取@Model.model注解值,先在本类查找注解,如果本类未配置或注解值为空则在父类或接口上查找;若为空则取@Fun注解值,先在本类查找注解,如果本类未配置或注解值为空则在父类或接口上查找;若皆为空则取全限定类名 | 长度必须小于等于128个字符 |
name | 默认使用java方法名 | 仅支持数字、字母;必须以字母开头;长度必须小于等于128个字符;不能以get、set为开头作为函数名称 |
fun | 默认使用name属性 | 长度必须小于等于128个字符 |
summary | 默认使用displayName属性 | 不能使用分号;长度必须小于等于500个字符 |
descripition | NULL,注解无法定义 | 长度必须小于等于65535个字符 |
openLevel | 函数的开放等级默认值:{FunctionOpenEnum.LOCAL, FunctionOpenEnum.REMOTE} | FunctionOpenEnum枚举值;LOCAL(2L, "本地调用", "本地调用"), REMOTE(4L, "远程调用", "远程调用"), API(8L, "开放接口", "开放接口"); |
Advanced.displayName | 默认使用name属性 | 长度必须小于等于128个字符 |
Advanced.timeout | 超时时间默认:5秒,远程调用时配置生效 |
Oinone社区 作者:shao原创文章,如若转载,请注明出处:https://doc.oinone.top/yan-fa-gui-fan/5550.html
访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验