一二三应用开发平台应用开发示例(2)——创建应用、模块、实体及配置模型

创建应用

文档管理系统对于开发平台是一个业务应用。
业务应用是通过平台内置的数据字典来维护的,因此访问系统管理模块下的数据字典管理功能,在实体配置分组下找到“应用编码”,点击行记录上的“字典项”。
image.png
在打开的新窗口中,在原有开发平台的基础上,新建1条文档管理系统的记录,注意遵循常量值的命名规范,使用EDOC,如下图所示:
image.png

创建模块

访问系统管理模块下的“模块”功能,新建一条记录,注意应用选择上面新建的“文档管理系统”,编码输入edoc,会对应到包名,包路径输入tech.abc.edoc,缩略码为ed,平台依据实体生成库表时,会将缩略码作为库表的前缀。
image.png

新建实体

在完成应用与模块的配置后,以文件夹为例,进行实体配置工作。
访问实体配置模块下的实体菜单,点击新建按钮,选择上面创建的“文档管理”模块,输入实体的名称和编码,平台在生成代码时将编码作为实体名,因此规范遵循java类的命名规范,首字母大写,保存后完成创建工作。
image.png

配置数据模型

在实体列表中通过查询功能,找到新建的“文件夹”实体,点击行记录上的“配置”按钮,如下图所示:
image.png
打开实体配置页面,如下图所示:
image.png
如左侧导航所示,实体配置分为两大步,数据模型和视图,前者对应着数据库表、实体类等,后者对应着前端页面,默认进入的是数据模型。
数据模型是实体重要的元数据,系统会参照数据模型的配置信息,生成数据库表,以及实体类、服务接口、服务实现、控制器和视图对象类。
为了提升开发效率,平台会参照实体配置信息自动生成1个同名的数据模型。

补充说明一点,实体与数据模型一对一只是最常见的一种情况,实际业务需求存在一对多的情况,如销售订单,不仅有订单,还有订单明细,可以使用平台添加新的数据模型。

设置自关联

当前配置的“文件夹”实体,通过父级可以形成树形结构,也就是自关联关系,因此这里需要点击行记录上的“修改”按钮,将“是否自关联”由否调整为是,如下图所示。
image.png
对于自关联的实体模型,平台会在代码生成环节做一些额外的逻辑处理,在控制器里增加树形数据的接口处理,如下所示:

    <#if entityModelSelfReferenceFlag=="YES">//region 树操作/*** 获取树数据** @return*/@GetMapping("/tree")@PreAuthorize("hasPermission(null,'${package.ModuleName}:${entity?uncap_first}:query')")public ResponseEntity<Result> tree() {QueryWrapper<${entity}> queryWrapper = new QueryWrapper<>();<#list entityModelPropertyList as item><#if item.code=="status">queryWrapper.lambda().eq(${entity}::getStatus, StatusEnum.NORMAL.toString());</#if><#if item.code=="orderNo">// 附加按照排序号排序queryWrapper.orderByAsc(TableFieldConstant.DEFAULT_SORT_FILED);</#if></#list>List<${entity}> list = ${entity?uncap_first}Service.list(queryWrapper);// 转化成树结构数据List<TreeVO> treeList = list.stream().map(e -> convert2TreeVO(e)).collect(Collectors.toList());List<TreeVO> tree = TreeUtil.buildTree(treeList, TreeDefaultConstant.DEFAULT_TREE_ROOT_PARENT_ID);return ResultUtil.success(tree);}/*** 转换为树视图对象*/private TreeVO convert2TreeVO(${entity} entity) {TreeVO tree = new TreeVO();tree.setId(entity.getId());tree.setParentId(entity.get${parentPropertyCode?cap_first}());tree.setLabel(entity.get${mainPropertyCode?cap_first}());return tree;}//endregion</#if>

配置属性

数据模型的属性,对应着java中实体类的属性,同时也对应着数据库中的字段。

上级

点击数据模型行记录上的“配置属性”按钮,打开属性列表,点击“新增”按钮,创建一条“上级”的属性。
image.png
该属性用于自关联,所以需要将“是否上级属性”的值设置为“是”。平台通过该标识来寻找上级关系,从而构建树状层次结构。

注:上级实际数据类型应该选择“实体”,但关联实体相对比较复杂,作为介绍平台使用的引导性范例,上来就是一个复杂的属性配置,不利于入门,因此这里先做基本的文本属性处理,完成基本的配置后,再做调整。
个别属性不需要存储到数据库,如多个属性组合成的属性则可以将“是否库表存储”的值由默认的是调整为否。

名称

按照同样操作新增名称属性,如下图所示:
image.png
注意红框标记的三处设置。
是否可为空:设置为否,平台会在生成代码时对前端和后端都附加必填验证,实现的效果也就是文件夹名称不能为空。
是否唯一:设置为是,且选择唯一性参照为“上级”,平台会在后端服务保存数据时附加验证“同一上级节点下不能存在名称相同的节点”,实现的效果也就是文件夹下不能存在两个名称相同的文件夹。
是否主属性:设置为是,主属性是指该实体的主要显示属性,当该实体作为关联对象时,标记为主属性的属性作为主要显示内容,例如,文件夹的上级也是文件夹,关联上级后,会显示上级文件夹的名称。

父级模型

通过上面操作,为文件夹数据模型设置了2个属性:上级、名称,然后就结束了。
实际上,平台会为实体自动附加一些通用公共属性,如标识、创建人、创建时间、修改人、修改时间、版本号、逻辑删除标识位,并不需要人工来对每个实体配置,如何实现的呢?通过模型继承来做到这一点的,这里的继承,与面向对象中的继承是同一个实现思路。

在数据模型的属性中,可以选择父级模型,系统预置了三个模型:标识模型(只有标识id属性)、业务模型(继承于标识模型,附加了创建人、创建时间、修改人、修改时间、乐观锁、逻辑删除标识位属性)、流程模型(继承于业务模型,附加了与流程相关的一系列发起人、流程状态等属性)。
image.png
并且模型既可以通过继承现有模型的方式扩展,也可以添加新的独立模型,从而达到复用的目的。

补充一点,模型的配置,是放在了一个基础模型的实体中,如下图所示:
image.png
平台在生成库表逻辑处理中,会递归找到该模型所有的父级模型,把字段补全;生成代码逻辑处理中,会使用继承来建立类关系。

开发平台资料

平台名称:一二三应用开发平台
平台简介:企业级通用低代码应用开发平台,免费全开源可商用
设计资料:csdn专栏
开源地址:Gitee
开源协议:MIT

应用系统资料

应用名称:一二三文档管理系统
应用简介: 企事业单位一站式文档管理系统,让组织内文档管理有序,协作高效、安全可控
设计文档:csdn专栏
开源地址:Gitee
开源协议:MIT

如果您在阅读本文时获得了帮助或受到了启发,希望您能够喜欢并收藏这篇文章,为它点赞~
请在评论区与我分享您的想法和心得,一起交流学习,不断进步,遇见更加优秀的自己!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超详解——Python 元组详解——小白篇

目录 1. 元组简介 创建元组 2. 元组常用操作 访问元组元素 切片操作 合并和重复 成员操作符 内置函数 解包元组 元组方法 3. 默认集合类型 作为字典的键 作为函数参数 作为函数的返回值 存储多种类型的元素 4.元组的优缺点 优点 缺点 5.元组的使用场景 数据…

如何降低pcdn的延迟?

要降低P2P CDN的延迟&#xff0c;可以采取以下操作&#xff1a; 一&#xff0e;优化网络连接&#xff1a; 1、使用有线网络连接替代无线连接&#xff0c;因为有线连接通常提供更稳定的数据传输。 2、升级家庭或企业路由器&#xff0c;选择性能更好的路由器以提高网络传输速度…

6月11号作业

思维导图 #include <iostream> using namespace std; class Animal { private:string name; public:Animal(){}Animal(string name):name(name){//cout << "Animal&#xff1b;有参" << endl;}virtual void perform(){cout << "讲解员的…

【FineReport】帆软调用服务器的kettle作业

1、编写自定义函数并编译 package com.fr.function;import ch.ethz.ssh2.ChannelCondition; import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; import ch.ethz.ssh2.StreamGobbler; import com.fr.script.AbstractFunction;import java.io.BufferedReader; impo…

【web APIs】快速上手Day02

文章目录 Web APIs - 第2天事件事件监听案例一 :京东点击关闭顶部广告案例二&#xff1a;随机点名案例拓展知识-事件监听版本 双击事件 事件类型鼠标事件综合案例-轮播图完整版 焦点事件综合案例-小米搜索框案例 键盘事件文本事件 事件对象综合案例-按下回车发布评论 环境对象回…

算法day27

第一题 515. 在每个树行中找最大值 首先是遍历每层的节点&#xff0c;将每一层最大值的节点的值保留下来&#xff0c;最后将所有层的最大值的表返回&#xff1b;具体的遍历每层节点的过程如上一篇故事&#xff1b; 综上所述&#xff0c;代码如下&#xff1a; /*** Definition …

数据结构与算法题目集(中文) 6-3 求链表的表长

该代码使用循环遍历链表来计算链表的长度。代码首先定义了一个整数变量i用于计数&#xff0c;并初始化为0。然后进入一个while循环&#xff0c;条件为链表L非空。在循环中&#xff0c;通过L L->Next来遍历链表中的每一个节点&#xff0c;并将计数变量i递增。最终返回计数变…

2024海南省大数据教师培训-Hadoop集群部署

前言 本文将详细介绍Hadoop分布式计算框架的来源&#xff0c;架构和应用场景&#xff0c;并附上最详细的集群搭建教程&#xff0c;能更好的帮助各位老师和同学们迅速了解和部署Hadoop框架来进行生产力和学习方面的应用。 一、Hadoop介绍 Hadoop是一个开源的分布式计算框架&…

文献解读-农业系列-第七期|《高粱驯化的基因组足迹和多种最终用途的育种选择》

关键词&#xff1a;高粱基因分析&#xff1b;基因组变异检测&#xff1b;全基因组重测序&#xff1b; 文献简介 标题&#xff08;英文&#xff09;&#xff1a;Genomic footprints of sorghum domestication and breeding selection for multiple end uses标题&#xff08;中文…

【Linux系统化学习】传输层——TCP协议

目录 预备知识 全双工协议 协议缓冲区 TCP协议 TCP协议格式 六个标志位 两个问题 确认应答机制 流量控制 超时重传机制 连接管理机制 CLOSE_WAIT状态 TIME_WAIT状态 滑动窗口 拥塞控制 延迟应答 捎带应答 粘包问题 TCP的异常情况 TCP小结 TCP/UDP协议对比…

MAC认证

简介 MAC认证是一种基于接口和MAC地址对用户的网络访问权限进行控制的认证方法&#xff0c;它不需要用户安装任何客户端软件。设备在启动了MAC认证的接口上首次检测到用户的MAC地址以后&#xff0c;即启动对该用户的认证操作。认证过程中&#xff0c;不需要用户手动输入用户名…

成都跃享未来教育抖音小店深度解析靠谱与否

在如今网络购物日益繁荣的时代&#xff0c;抖音小店以其独特的平台优势和庞大的用户基础&#xff0c;吸引了越来越多的商家入驻。成都跃享未来教育咨询有限公司便是其中之一&#xff0c;它的抖音小店究竟靠不靠谱呢&#xff1f;今天&#xff0c;我们就来一起揭开这个谜底。 首…

刷题训练之分治归并

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握分治归并算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷…

神经气体生长算法【GNG】

当德国计算神经学家 Bernd Fritzke 在其 1995 年的开创性论文中提出后来被称为神经气体生长&#xff08;GNG&#xff09;的算法时&#xff0c;机器学习还是一个相对较新的领域&#xff0c;并且受到实际神经科学的极大启发。 当时&#xff0c;神经科学正处于一个突破性的时代—…

MySQL表设计经验汇总篇

文章目录 1、命名规范2、选择合适的字段类型3、主键设计要合理4、选择合适的字段长度5、优先考虑逻辑删除&#xff0c;而不是物理删除6、每个表都需要添加通用字段7、一张表的字段不宜过多8、定义字段尽可能not null9、合理添加索引10、通过业务字段冗余来减少表关联11、避免使…

电子元器件批发的几种模式

电子元器件的批发模式多种多样&#xff0c;以下是几种常见的模式&#xff1a; 传统批发模式&#xff1a;传统的电子元器件批发模式是指厂商或代理商通过与制造商签订合同&#xff0c;大批量购买元器件&#xff0c;并将其以较低的价格批发给零售商或其他中小型企业。这种模式通常…

【ARM Cache 及 MMU 系列文章 6.4 -- Cache miss 统计详细介绍】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 ARM Cache Miss 统计Cache 多层架构简介Cache 未命中的类型Cache 未命中统计Cache miss 统计代码实现Cache Miss 统计意义ARM Cache Miss 统计 在ARMv8/v9架构中,缓存未命中(Cache …

2. pytorch环境安装

概述 ​ 本文提供基于Anaconda环境Windows11操作系统的Pytorch深度学习环境的配置。深度学习环境分为GPU和CPU两大部分。使用GPU进行环境配置&#xff0c;需要保证电脑配有独立显卡&#xff0c;并且显卡驱动安装正常&#xff0c;详情见前文。 1. 创建新的虚拟环境用来配置Pyt…

DevExpress 控件和库

UI控件和组件 DevExpress WinForms包括以下Windows窗体库和控件&#xff1a; Grids and Editors Data Grid Tree List Vertical Grid Property Grid Gantt Control Data Editors and Simple Controls Office-inspired Ribbon, Bars and Menu Rich Text Editor Scheduler S…

什么是AIGC?AIGC是否会颠覆未来的内容生产模式?普通人如何利用好AI提高内容生产效率?

2024年是AI元年&#xff0c;正好我在AI公司里面工作&#xff0c;对AIGC有着几年的研究&#xff0c;接下来把我这对AIGC的学习经验毫无保留的给大家分享一下 AIGC 的简要介绍 在狭义上&#xff0c;AIGC是指利用AI自动生成内容的生产方式&#xff0c;比如自动写作、自动设计等。…