Caché数据库开发技术

版权声明:原创博客,转载请注明地址 https://blog.csdn.net/eve_gf/article/details/81386762

一、Caché简介及多维存储

Caché数据库是Inter Systems公司的产品,为了适应互联网的迅速发展对数据存储效率的要求,Inter Systems公司经过多年的努力,研发出了Caché数据库。Caché是新一代高性能数据库技术,它被誉为创新的“后关系型”数据库,作为后关系型数据库,它可以采用三种方式对其中的数据进行访问:1.对象数据库访问;2.SQL语句进行访问;3.采用多维数组的方式。

示例1.1:对象方式

/// function:通过对象的方式获取CT_Title的数据
/// debug:w ##class(web.TestTitle).GetDataByObj(11)
ClassMethod GetDataByObj(Id As %String) As %String
{
	set TTLRowId=""
	set TTLCode=""
	set TTLDesc=""
	set PObj=##class(User.CTTitle).%OpenId(Id)
	if (PObj){
		set TTLRowId=Id
	    set TTLCode=PObj.TTLCode
		set TTLDesc=PObj.TTLDesc
		}
	Quit TTLRowId_" "_TTLCode_" "_TTLDesc
}

示例1.2:SQL方式

/// function:通过SQL的方式获取CT_Title的数据
/// debug:w ##class(web.TestTitle).GetDataBySQL(11)
ClassMethod GetDataBySQL(Id As %String) As %String
{
	set TTLRowId=""
	set TTLCode=""
	set TTLDesc=""
	&SQL(
		select TTL_RowId,TTL_Code,TTL_Desc
		into :TTLRowId,:TTLCode,:TTLDesc
		from SQLUser.CT_Title where TTL_RowId=:Id
	)
	Quit TTLRowId_" "_TTLCode_" "_TTLDesc
}

示例1.3:多维数组方式

/// function:通过多维数组的方式获取CT_Title的数据
/// debug:w ##class(web.TestTitle).GetDataByGlobal(11)
ClassMethod GetDataByGlobal(Id As %String) As %String
{
	set TTLRowId=""
	set TTLCode=""
	set TTLDesc=""
	set TTLRowId=Id
	set TTLCode=$p($g(^CT("TTL",TTLRowId)),"^",1)
	set TTLDesc=$p($g(^CT("TTL",TTLRowId)),"^",2)
	Quit TTLRowId_" "_TTLCode_" "_TTLDesc
}

二、Caché数据库的特点

1.Caché包括应用服务器

Caché提供的不仅仅是一种单纯的数据库技术,在Caché中包括一个应用服务器,这个服务器提供高级对象编程,并且可以很容易地与很多技术集成。

2.Caché的编程技术--M语言

Caché提供了可以用多种技术编写数据库和业务逻辑的能力。Caché的ObjectScript支持所有数据存取方法:对象、SQL、多维数组和嵌入式 HTML 。Caché Basic 与 Visual Basic 非常相似,只是做了很少的调整扩展,以便利用 Caché独特的性能。

3.Caché的CSP技术

Caché为开发复杂的、基于网页应用程序提供了丰富的集成开发环境。Caché Service Page(CSP)技术可以进行快速开发,动态产生。

示例2.1:默认的CSP页面

<html>
<head>

<!-- Put your page Title here -->
<title>	Cache Server Page </title>

</head>

<body>

		<!-- Put your page code here -->
		My page body
</body>
</html>

示例2.2:通过CSP实现前后端交互

<csp:method name=OnPreHTTP arguments="" returntype=%Boolean>
 i ##Class(websys.SessionEvents).SessionExpired() q 1
 quit 1
</csp:method>
<html>
<head>
<title>Test</title>
</head>
<body>
	<div style="margin:0 auto;width:400px;height:400px;background-color:#C5B6B6;">
		<form action="dhcastudentcourse.csp" method="get">
			课程代码: <input class="h50" type="text" value="#($g(%request.Data("CourseNum",1)))#" id="CourseNum" name="CourseNum">
			<input class="h50" type="submit" value="查询" id="Find">
		</form>	
		<table style="width:100%;">
		<server>
			Set LocId = %session.Data("LOGON.CTLOCID")
			Set LocDesc = $p(^CTLOC(LocId),"^",2)
			set CourseNum = $g(%request.Data("CourseNum",1))
			if (CourseNum'=""){
				Set rs = ##class(%ResultSet).%New("web.DHCAStudentCourse:FindInfo")
			    Set %sc = rs.Execute(CourseNum)
				w "<tr><td>姓名</td><td>分数</td></tr>"
				While(rs.Next()){
				    w "<tr><td>"_rs.GetDataByName("StName")_"</td><td>"_rs.GetDataByName("Score")_"</td></tr>"
			    }
				Do rs.Close()
			    Set rs = ""
			}
	    </server>
		</table>
		<div>
		当前用户: #(%session.Data("LOGON.USERNAME"))#
		当前科室: #(LocDesc)# 
		</div>	
	</div>
</body>
</html>

三、开发环境及映射关系

1.开发环境

开发环境B/S架构

Web容器 : IIS

开发语言: M

数据库:  Caché

IE-->IIS ->CSP Gateway ->csp application->dhc.logon.csp--反向操作

2.命名空间与数据库的映射关系

应用程序通过命名空间访问数据库里的数据和程序,因此, 命名空间和数据库之间要建立映射。命名空间和数据库之间的映射不一定是一对一的。一个数据库可以被多个命名空间访问;相反,一个命名空间可以访问多个数据库里的数据。建立命名空间的主要工作就是建立与数据库的映射,这样做可以将程序逻辑与物理存在的数据独立开来,便于开发人员专注于系统功能设计,不需要为未来实施时不同的系统架构而作出额外的工序,系统架构也因为这样变得更灵活。

猜你喜欢

转载自blog.csdn.net/eve_gf/article/details/81386762