美文网首页收藏
第三十九章 持久对象和SQL - 持久类的 SQL 映射

第三十九章 持久对象和SQL - 持久类的 SQL 映射

作者: Cache技术分享 | 来源:发表于2023-09-25 07:08 被阅读0次

第三十九章 持久对象和SQL - 持久类的 SQL 映射

持久类的 SQL 映射

对于任何持久类,该类的每个实例都可以作为表中的一行使用,可以通过 SQL 查询和操作该行。为了演示这一点,本节使用管理门户和终端。

对象 SQL 映射的演示

考虑 SAMPLES 中的 Sample.Person 类。如果我们使用管理门户来显示与该类对应的表的内容,我们会看到如下内容:

image.png

请注意以下几点:

  • 此处显示的值是显示值,而不是存储在磁盘上的逻辑值。
  • 第一列 (#) 是该显示页面中的行号。
  • 第二列(ID)是该表中行的唯一标识符;这是打开此类对象时使用的标识符。 (在此类中,这些标识符是整数,但这并不总是正确的。)

在本例中,这些数字恰好相同,因为每次构建 SAMPLES 数据库时都会重新填充该表。在实际应用中,有可能某些记录已被删除,从而导致ID值存在间隙,并且这些值与行号不匹配。

在终端中,我们可以使用一系列命令来查看第一人称:

SAMPLES>set person=##class(Sample.Person).%OpenId(1)
 
SAMPLES>write person.Name
Newton,Dave R.
SAMPLES>write person.FavoriteColors.Count()
1
SAMPLES>write person.FavoriteColors.GetAt(1)
Red
SAMPLES>write person.SSN
384-10-6538
>>> person=iris.cls("Sample.Person")._OpenId(1)
>>> print(person.Name)
Newton,Dave R.
>>> print(person.FavoriteColors.Count())
1
>>> print(person.FavoriteColors.GetAt(1))
Red
>>> print(person.SSN)
384-10-6538

这些值与我们通过 SQL 看到的值相同。

对象 SQL 映射的基础知识

由于继承不是关系模型的一部分,因此类编译器将持久类的“扁平”表示映射为关系表。下表列出了一些不同的对象元素如何投影到 SQL

Object Concept SQL Concept
Package Schema
Class Table
Property Field
Embedded object Set of fields
List property List field
Array property Child table
Stream property BLOB or CLOB
Index Index
Class method marked as stored procedure Stored procedure

映射表包含该类的所有适当字段,包括继承的字段。

Classes and Extents

IRIS 使用一种非常规且强大的对象表映射解释。

持久类的所有存储实例组成了所谓的类extent,一个实例属于它作为实例的每个类的范围。所以:

  • 如果持久类 Person 有子类 Student,则 Person 范围包括 Person 的所有实例和 Student 的所有实例。
  • 对于 Student 类的任何给定实例,该实例都包含在 Person 范围和 Student 范围中。

索引自动跨越定义它们的类的整个范围。 Person 中定义的索引包含 Person 实例和 Student 实例。 Student 范围中定义的索引仅包含 Student 实例。

子类可以定义其超类中未定义的附加属性。这些在子类范围内可用,但在超类范围内不可用。例如,Student 范围可能包括FacultyAdvisor 字段,该字段不包括在Person 范围中。

上述几点意味着在 IRIS 中编写检索相同类型的所有记录的查询相对容易。例如,如果想要统计所有类型的人员,可以对 Person 表运行查询。如果只想计算学生数量,请对 Student 表运行相同的查询。相反,对于其他对象数据库,要对所有类型的人员进行计数,则需要编写组合表的更复杂的查询,并且每当添加另一个子类时都需要更新此查询。

相关文章

  • mybatis学习笔记一

    [TOC] 框架技术 持久化 mybatis概念 概念:一个持久层框架 作用:ORM将sql语句映射成实体类 特点...

  • 【mybatis xml】数据层框架应用--Mybatis 基于

    使用MyBatis框架进行持久层开发 MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。 M...

  • 【mybatis annotation】数据层框架应用--Myb

    使用MyBatis框架进行持久层开发 MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。 M...

  • MyBatis入门

    1、MyBatis框架     MyBatis是一个优秀的数据持久层框架,在实体类和SQL语句之间建立映射关系,是...

  • MyBatis基础搭建及架构概述

    MyBatis 是什么? MyBatis是第一个支持自定义SQL、存储过程和高级映射的类持久框架。 MyBatis...

  • MyBatis

    一、理解 概念:一个持久层框架作用:ORM将sql语句映射成实体类特点: 小巧灵活 半自动化,面向sql 使用于中...

  • Hibernate(01)

    首先认识Hibernate框架是ORM关系映射框架, 工作在持久(dao)层,用对象的方式操作sql数据库 优点:...

  • Mybatis

    Mybatis 介绍MyBatis是支持普通 SQL 查询,存储过程和高级映射的优秀持久 层框架。MyBatis ...

  • 第十二章 使用嵌入式SQL(六)

    第十二章 使用嵌入式SQL(六) 持久类方法中的嵌入式SQL 下面的示例显示了一个持久类,其中包含一个类方法和一个...

  • MyBatis入门

    MyBatis入门 MyBatis是一个第一类持久性框架,支持自定义SQL,存储过程和高级映射。MyBatis几乎...

网友评论

    本文标题:第三十九章 持久对象和SQL - 持久类的 SQL 映射

    本文链接:https://www.haomeiwen.com/subject/esbqbdtx.html