定义模型,并配上相应的菜单或配置模块的homepage为该模型,模块就具备了可访问的该模型对应的列表页、新增页、修改页、删除记录和导入导出功能。
都说oinone是以model为驱动,对于模型的理解,希望通过本节跟给大家带来一个初步的认识。
一、构建宠物店铺模型
package pro.shushi.pamirs.demo.api.model;
import pro.shushi.pamirs.meta.annotation.Field;
import pro.shushi.pamirs.meta.annotation.Model;
import pro.shushi.pamirs.meta.base.IdModel;
import java.sql.Time;
@Model.model(PetShop.MODEL_MODEL)
@Model(displayName = "宠物店铺",summary="宠物店铺")
public class PetShop extends IdModel {
public static final String MODEL_MODEL="demo.PetShop";
@Field(displayName = "店铺名称",required = true)
private String shopName;
@Field(displayName = "开店时间",required = true)
private Time openTime;
@Field(displayName = "闭店时间",required = true)
private Time closeTime;
}
配置注解
模型类必需使用@Model注解来标识当前类为模型类。
可以使用@Model.model、@Fun注解模型的模型编码(也表示命名空间),先取@Model.model注解值,若为空则取@Fun注解值,若皆为空则取全限定类名。
使用@Model.model注解配置模型编码,模型编码唯一标识一个模型。
请勿使用Query和Mutation作为模型编码和技术名称的结尾。
上方示例使用Model注解和Field注解来定义一个实体模型。displayName属性最终会作为label展现在前端界面上。
更多Model的详细元数据描述介绍参见4.1.6【模型元数据详解】一文
模型命名规范
模型属性 | 默认取值规范 | 命名规则规范 |
---|---|---|
name | 默认取model.model的点分割最后一位 | 1仅支持数字、字母2必须以字母开头3长度必须小于等于128个字符 |
module | 无默认值开发人员定义规范示例:{项目名称}_{模块功能示意名称} | 1仅支持数字、大写或小写字母、下划线2必须以字母开头3不能以下划线结尾4长度必须小于等于128个字符 |
model | 默认使用全类名,取lname的值开发人员定义规范示例:{项目名称}.{模块功能示意名称}.{简单类名} | 1仅支持数字、字母、点2必须以字母开头3不能以点结尾4长度必须小于等于128个字符 |
display_name | 空字符串 | 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使用相同命名规则约束 |
display_name | 默认使用name属性 | 1长度必须小于等于128个字符 |
lname | 使用java属性名,符合java命名规范,真实的属性名称,无法指定 | 与name使用相同命名规则约束 |
column | 列名为属性名的小驼峰转下划线格式 | 1仅支持数字、字母、下划线2长度必须小于等于128个字符(此限制为系统存储约束,与数据库本身无关) |
summary | 默认使用displayName属性 | 1不能使用分号2长度必须小于等于500个字符 |
我们重启Demo应用以后,打开Insomnia刷新GraphQL的schema,就可以看到PetShop默认对应的读写服务了
配置模块的主页为宠物商店的列表页
为了方便大家对模型有个更加直观的了解,接下来我们通过前端交互来感受下。
在3.2.2【启动前端工程】一文中,在模块下拉列表中“oinoneDemo工程”还是不能点击的。是因为该模块没有配置主页,我们现在把主页设置为宠物商店的列表页,只需要在DemoModule这个类上增加一个注解@UxHomepage(@UxRoute(PetShop.MODEL_MODEL)),关于该注解的更多说明请查看4.1.4一文中的【UxHomepage注解详解】部分
package pro.shushi.pamirs.demo.api;
import org.springframework.stereotype.Component;
import pro.shushi.pamirs.boot.base.ux.annotation.action.UxRoute;
import pro.shushi.pamirs.boot.base.ux.annotation.navigator.UxHomepage;
import pro.shushi.pamirs.demo.api.model.PetShop;
import pro.shushi.pamirs.meta.annotation.Module;
import pro.shushi.pamirs.meta.base.PamirsModule;
import pro.shushi.pamirs.meta.common.constants.ModuleConstants;
@Component
@Module(
name = DemoModule.MODULE_NAME,
displayName = "oinoneDemo工程",
version = "1.0.0",
dependencies = {ModuleConstants.MODULE_BASE}
)
@Module.module(DemoModule.MODULE_MODULE)
@Module.Advanced(selfBuilt = true, application = true)
@UxHomepage(@UxRoute(PetShop.MODEL_MODEL))
public class DemoModule implements PamirsModule {
public static final String MODULE_MODULE = "demo_core";
public static final String MODULE_NAME = "DemoCore";
@Override
public String[] packagePrefix() {
return new String[]{"pro.shushi.pamirs.demo"};
}
}
重启demo应用,打开前端页面登陆后并通过App Finder切换至“oinoneDemo工程”,我们跟着下面操作一步一步来体验下。
- 在App Finder 的应用列表选中【oinoneDemo工程】,我们会看到系统进入了【宠物商店列表】
图3-3-1-5 切换应用“OinoneDemo工程”
- 点击【宠物商店列表】页面中【新增】按钮进入【宠物商店的新增页面】
- 点击【宠物商店的新增页面】的确定按钮,回到【宠物商店列表】,并能看到刚刚新增的记录
- 对【宠物商店列表】的数据记录可以进行【编辑】、【详情】操作。如点击【编辑】则进入数据记录的【宠物商店数据记录的编辑页】
查看数据库
大家可能会问我们的数据存储哪里去了?
我们这个demo应用一共生成了两个库包括demo和demo_base,分别对应yml文件两个数据源pamirs和base,base库存放系统元数据,pamirs库存放了demo模块以及其他安装模块的数据
那我们来找到demo库,就可以看到有一个demo_core_pet_shop表以及我们新增的数据
库、表的规则是boot工程里的yml文件配置的,如何配置可以参考4.1.1【模块之yml文件结构详解】一文
定义模型,并配上相应的菜单或配置模块的homepage为该模型,模块就具备了可访问的该模型对应的列表页、新增页、修改页、删除记录和导入导出功能。是不是上手还是比较容易的,本节学习就先到这里。
注:本节中的所有页面都是系统默认的,更多有关前端交互包括菜单、页面、行为知识可以在3.5【oinone以交互为外在】一章中详细学习。
Oinone社区 作者:史, 昂原创文章,如若转载,请注明出处:https://doc.oinone.top/oio4/9232.html
访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验