实现
版权声明
- 文章作者: flytreeleft - flytreeleft@crazydan.org
- 文章链接: https://duzhou.crazydan.io/docs/development/framework/app-modeler/tech
- 版权声明: 本文章采用许可协议《署名 4.0 国际 (CC BY 4.0)》。 转载或商用请注明来自渡舟平台!
备忘
- 在需要通过被关联对象的某个属性查询时,可以定义别名并映射到目标属性上,
然后,在 XMeta 中设置别名为可查询的即可。如,定义别名映射
appId -> module.appId,再设置可查询<prop name="appId" queryable="true" /> io.nop.biz.crud.CrudBizModel#asDict可以将实体模型作为字典数据返回io.nop.dbtool.core.diff.OrmModelDiffer可以获取指定 ORM 模型(app.orm.xml)间的差异orm.xml中 Entity PropId 在设计阶段可以自动按序生成, 但发版后,由于代码已打包,PropId 已固定,便不能修改, 后续针对相同模型做扩展或修改,则需要从发版模型中的最大 PropId 开始重新计算- 参考
io.nop.dyn.service.codegen.DynCodeGen做代码生成 - 通过
io.nop.orm.ddl.DdlSqlCreator构造 SQL 脚本 - 参考
io.nop.dyn.dao.model.DynEntityMetaToOrmModel#transformModule将 ORM 实体模型转换为OrmModel- 通过
io.nop.orm.model.loader.OrmModelLoader#loadOrmModel可加载并合并所有 Nop 模块的app.orm.xml - 导出 Excel:
NopDynModuleBizModel#exportExcel
- 通过
- 通过
io.nop.biz.crud.OrmEntityCopier#copyToEntity对 ORM 实体进行构造或更新:先构造 xmeta 再通过OrmEntityCopier合并 - 通过
io.nop.dbtool.core.discovery.jdbc.JdbcMetaDiscovery#discover实现从数据到OrmEntityModel的转换 - 默认的表名、字段名大小写控制在
_vfs/nop/dao/dialect/default.dialect.xml中以tableNameCase="lower" columnNameCase="upper"方式控制 - 参考
io.nop.cli.commands.GenOrmHelper#saveOrmToExcel做 ORM 的导出 - 在
io.nop.orm.initialize.DataBaseSchemaInitializer中实现启动时自动初始化数据库, 其在/nop/orm/beans/orm-defaults.beans.xml通过配置开关nop.orm.init-database-schema控制启禁 - 尽可能以 xpl 函数方式实现业务逻辑,以支持在设计和扩展时对函数做差量,
至于性能问题,可以在后续支持在正式发布打包时将 xpl 编译为静态 class
- 缺点:无补全提示、调试复杂
- 优点:类 TypeScript 语法,代码编写更自由、可对 xlib 函数做差量
- AMIS 的 Table 组件在列上配置
filterable时,必须设置searchable=true才会渲染过滤列表组件 - AMIS 中可以通过
Service组件动态加载 Schema 以实现复用
{
"type": "dialog",
"title": "编辑应用",
"closeOnEsc": true,
"body": {
"type": "service",
"schemaApi": "get:/pages/admin/demo/app-dev/edit-app.json"
}
}
注意事项
- 默认不为
app.orm.xml中的to-one创建外键关联,仅当为其指定了constraint时才会在数据库中建立外键约束,默认在 Nop ORM 层中维护关联关系- 外键关联仅针对
to-one类型,to-many属于逻辑性关联 - 出于数据库的性能考虑,一般建议在应用侧维护数据间的关联,尽量避免使用外键约束
- 注:目前 Nop ORM 始终不创建外键约束,索引创建也未支持
- 外键关联仅针对
- 若
app.orm.xml对unique-key未设置constraint,则不会在数据库中创建唯一性约束- 将 xlib 函数
ddl:TableUniqueConstraints
- 将 xlib 函数
- 数据库的唯一性等约束名称需确保在同一库内是唯一的
- 在 orm entity 上的
querySpace属性可指定不同的数据源,从而支持多数据库连接:docs/dev-guide/orm/multi-db.md