Cache学习(四)

SALTEST-FISH / 2023-07-26 / 原文

学习时间有限,放截图可能快点,这周计划把cache学习完来着。

cache数据库最大的特点是global:

global就像全区变量一样,是一个广义的全局变量。数据库表中的一些重要的字段名以字符串的形式存入global(字段与字段之间用^),配合m语言。根据主索引可以轻易取出想要的字段。数据表的索引全部储存在global中。当然数据库信息也可用sql语句查询得到。详细的品味global,再用global配合m语言操作表的时候,感觉global下封装了类似sql的代码。在java中操作数据库的时候,需要加载驱动器,新建连接,等一系列。反正挺麻烦的。在m语言中只是通过global。而且m语言的中写sql语言也很方便。这是为什么呢。感觉m语言更像操作数据库的语言一样,有的语言是面向对象的。m语言是面向表的。

cache数据库没有外键这种烦人的东西,每张表都以id作为主键,表与表直接的联系以id做指针。这样让表的结构十分容易理解

csp文件作为view,csp文件中可以写js,也和写m语言。类似java的jsp文件一样

cls文件作为control,一些逻辑性的东西在这里面写。也可以建表,可以在里面写一些方法逻辑。

js文件作为后台cls文件与前台csp文件的交流之用,可以在里面调用cls文件的方法,然后输出前台(在js中调用cls的方法,主要还是js中可以写m语言,用  '#(m语言)#'  )

  •  创建持久类

在cache中创建持久类,同时能创建表。和其它编程语言对比省去了连接数据库的步骤,也不用单独创建包对数据库进行crud操作。

 

 

 

 

  •  持久类建表相关基础知识

 下图为创建学生类的代码:

 下图为重新命名数据库的列名:

 下图为安排数据库列名排序:

 下图为创建索引,创建后要生成索引:

生成索引:

查看索引:

 通过加存储,添加字段:

 

 

 

 

 两种查询(storage)的查询方法

 

 点击storage

 新建global name

 定义数据顺序:

 定义数据层级:

 表的计数器:记录最大rowid

 

  •  建表过程

创建表

Class User.DHCXueBiaoTable Extends  Persistent [ SqlRowIdName = DHC_RowId, SqlTableName = DHC_XueBiaoTable, StorageStrategy = XueBiaoTableStorage ]
{

Property DHCCode As  String [ SqlColumnNumber = 2, SqlFieldName = DHC_Code ];

// 课程代码

// SqlColumnNumber表示行序号从2开始

Property DHCDesc As  String [ SqlColumnNumber = 3, SqlFieldName = DHC_Desc ];

// 课程描述

Property DHCDateFrom As  Date [ SqlColumnNumber = 4, SqlFieldName = DHC_DateFrom ];

// 开始日期

Property DHCActive As  String(DISPLAYLIST = ",Yes,No", MAXLEN = 3, TRUNCATE = 1, VALUELIST = ",Y,N") [ SqlColumnNumber = 5, SqlFieldName = DHC_Active ];

// 课程活动

Property DHCUserDr As User.SSUser [ SqlColumnNumber = 6, SqlFieldName = DHC_User_Dr ];

// 课程老师,相当于外键指向SSUser表

 

1.我们已经建了一个person类,接下来就是表的存储结构 
2.打开Inspector,先输入rowid名字为p_RowID,选class->Storage 

3.新建一个Storage,选择CacheSQLStorage,在SqlIdExpression中输入$i(^mdata(“Person”))是\$不是S 
意思是设置Rowid为自增,注意StremLocation的写法 
  

4.Caché 以多维数组存储数据,所有数据都是保存Global中。Global以如下形式表示:^名称(下标1,下标2,下标3…)=值 
SET ^Y(3,6,7)=”third” 
SET ^Y(3,6,8)=”fourth” 
SET ^Y(3,6,7,8,4)=”fifth” 
SET ^Y(3,6,7,8,9)=”sixth” 
Global的树状结构如下: 
5.打开SQL storage map建立索引,点击add,选择map type为data,输入global名,一般为类名的大写 

 


6.点击左侧data,选择add添加glabal的三条数据,用“^”隔开 

7.点击左侧Subscripts,输入{p_RowID} 

 


8.点击左侧Rowid,输入如图所示 

 


9.这时就建立了一个主索引,通过rowid可以查询表数据 

^PERSON(1)=xiaoming^18^man 
^PERSON是global名,(1)表示rowid为1,后面的数据位置根据data里的位置排列 
10.接下来,我们在建一个索引,在NewStorage1里add一个索引,map type选择index,输入global名 

 


11.Subscripts建立如图所示,这里表示了global的四个层级,第一和第二层级是自己起的名字,方便理解global存储的信息,三四层是具体内容 

 

  
12.rowid如图所示,是第四层 

 


13.这个以名字建立的索引我们以global来理解 
^PERSONi(0,”name”,”xiaoming”,1)=0

 cache4 1.08.31