Cache(十二)父子表的创建Cache(十三)父子表查询、新增与事务
1.Cache学习(一)Cache简介2.Cache学习(二)Cache存储3.Cache学习(三)代码规范4. Cache学习(四)创建持久类(实体类)5. Cache学习(五)索引查询的编写6. Cache学习(六)常用函数7.Cache学习(七)Query的概念以及操作方法(八)SQL实现增删改查(九)PLIST实现增删改查8.Cache(十):面向对象基础 Cache(十一):面向对象开发9.Cache(十四):webservice10.Cache配置及部署问题合集
11.Cache(十二)父子表的创建Cache(十三)父子表查询、新增与事务
12.Cache(十五):Hisui技术与组件开发13.HISUI问题合集14.Cache问题合集15.迟归项目维护-
父子表介绍及创建
举例:
创建操作步骤(不用填sqlrowid表达式,根据父表自动生成)
-
父子表的新增、查询、事务
练习创建父子表
- 创建类
选择持久类
- 编写变量
/// 功能:创建学生选课表 /// 创建日期:2023年8月15日 /// 创建人:houyuxuan /// 字段:StSc_RowId,DHCScCourseDR,DHCScScore Class User.DHCStudentCourseSFCA Extends %Persistent [ SqlTableName = DHC_StudentCourseSFCA ] { ///课程变量 Property DHCScCourseDR As DHCCourseSFC [SqlFieldName=DHC_ScCourse_DR]; /// 成绩 Property DHCScScore As %Integer [SqlFieldName=DHCScScore]; }
- 新建storage
- 父表中定义子表关系
Relationship ChildCourse As DHCStudentCourseSFCA [ Cardinality = children, Inverse = DHCParRef ];
- 子表中定义父表关系
Relationship DHCParRef As DHCStudentSFCA [ Cardinality = parent, Inverse = ChildCourse ];
- 子表中创建childsub,作用是获取父表的ROWID
首先确定存储的global,父子表一般存在一个global中
$S取父表ROWID赋值给子表,Course
自己定义的节点,"0"
相当于childsub第三层节点将$i取出的值赋值给第三层节点
///创建childsubProperty DHCScChildSub As %Numeric(SCALE=0) [ InitialExpression = {$I(^DHCCOURSESFCA(+$S($d(initvalue):initvalue,1:%d(0)),"Course","0"))}, Required, SqlColumnNumber = 2, SqlFieldName = DHC_ScChildSub ];
- 为childsub后每一个变量添加SqlColumnNumber
SqlColumnNumber=2
-
给childsub定义索引
Index IndexName On DHCScChildSub[IdKey,PrimaryKey,Unique];
- 添加map datamaster
-
添加data存储
- 定义节点,并将两个rowid起始值设为1
- 添加RowId
- 定义rowidname属性值
- 查看新建的表结构
- $s:
返回第一个表达式的值 cache12 0.50.48
- 添加索引
完整代码
/// 功能:创建学生选课表
/// 创建日期:2023年8月15日
/// 创建人:houyuxuan
/// 字段:StSc_RowId,DHCScCourseDR,DHCScScore
Class User.DHCStudentCourseSFCA Extends %Persistent [ SqlTableName = DHC_StudentCourseSFCA, StorageStrategy = NewStorage1 ]
{
/// 子表中定义父表
Relationship DHCScParRef As DHCStudentSFCA [ Cardinality = parent, Inverse = ChildCourse, SqlFieldName = DHC_ScParRef ];
/// 创建childsub
Property DHCScChildSub As %Numeric(SCALE = 0) [ InitialExpression = {$INCREMENT(^DHCCOURSESFCA(+$SELECT($DATA(initvalue):initvalue,1:%d(0)),"Course","0"))}, Required, SqlColumnNumber = 2, SqlFieldName = DHC_ScChildSub ];
/// 课程变量
Property DHCScCourseDR As DHCCourseSFC [ SqlColumnNumber = 3, SqlFieldName = DHC_ScCourse_DR ];
/// 成绩
Property DHCScScore As %Integer [ SqlColumnNumber = 4, SqlFieldName = DHC_ScScore ];
/// 给childsub定义索引
Index IndexName On DHCScChildSub [ IdKey, PrimaryKey, Unique ];
Storage NewStorage1
{
<SQLMap name="DataMaster">
<Data name="DHC_ScCourse_DR">
<Delimiter>"^"</Delimiter>
<Piece>1</Piece>
</Data>
<Data name="DHC_ScScore">
<Delimiter>"^"</Delimiter>
<Piece>2</Piece>
</Data>
<Global>^DHCCOURSESFCA</Global>
<RowIdSpec name="1">
<Expression>{L1}</Expression>
<Field>DHC_StudentSFCA.St_RowId</Field>
</RowIdSpec>
<RowIdSpec name="2">
<Expression>{L3}</Expression>
<Field>DHC_ScChildSub</Field>
</RowIdSpec>
<Subscript name="1">
<Expression>{DHC_StudentSFCA.St_RowId}</Expression>
<StartValue>1</StartValue>
</Subscript>
<Subscript name="2">
<Expression>"Course"</Expression>
</Subscript>
<Subscript name="3">
<Expression>{DHC_ScChildSub}</Expression>
<StartValue>1</StartValue>
</Subscript>
<Type>data</Type>
</SQLMap>
<SqlRowIdName>StSc_RowId</SqlRowIdName>
<StreamLocation>^User.DHCStudentCourseSFCAS</StreamLocation>
<Type>%CacheSQLStorage</Type>
}
}
练习父子表的查询、新增
- 终端模拟
先取出RowId
DHC-APP>s ParRef=0
DHC-APP>s ParRef=$O(^DHCSTUDENTSFCA(ParRef))
DHC-APP>w
ParRef=3
cache13 0.14.39
DHC-APP>s ChildSub=0
DHC-APP>s ChildSub=$O(^DHCSTUDENTSFCA(ParRef,"Course",ChildSub))
DHC-APP>w
ChildSub=1
ParRef=3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现