`

meta-data-实体元数据(2)

阅读更多

7.3  实体元数据

为了使用MDA思想进行系统的设计开发,在案例系统中为在系统中处于核心的数据实体引入了元数据机制,系统建模、代码生成、系统开发、系统运行全部基于此元数据机制。

7.3.1  实体元数据格式

实体元数据中定义了实体的别名、对应的表名、实体的字段列表、字段的名称、字段的别名、字段类型等,基本包含了数据实体的公共特征,实体元数据文件的扩展名为“.emf”。下面是人员元数据的内容,各个标记的含义见注释:

<EnityModel>

    <!--实体的名称为Person-->

    <Name>Person</Name>

    <!--实体的别名为Person-->

    <Alias>人员</Alias>

    <!--此实体定义在com.cownew.PIS.basedata包下-->

    <PackageName>com.cownew.PIS.basedata</PackageName>

    <!--实体对应的数据库表名为T_BD_Person-->

    <DbTableName>T_BD_Person</DbTableName>

    <!--实体的主键为id-->

    <PrimaryKey>id</PrimaryKey>

 

    <!--下面是字段定义列表-->

    <FieldList>

        <Field>     

            <Name>id</Name>

            <Alias>id</Alias>

            <DbFieldName>FId</DbFieldName>

            <DataType>STRING</DataType>

            <AllowNull>false</AllowNull>

            <Length>50</Length>

            <IsLinkProperty>false</IsLinkProperty>

        </Field>

        <Field>

            <!--字段名为age-->

            <Name>age</Name>

            <!--字段别名为年龄-->

            <Alias>年龄</Alias>

            <!--字段对应的数据库字段名为FAge-->

            <DbFieldName>FAge</DbFieldName>

            <!--字段类型为INTEGER-->

            <DataType>INTEGER</DataType>

            <!--字段不允许为空-->

            <AllowNull>false</AllowNull>

            <!—字段不是关联属性(不关联其他实体)-->

            <IsLinkProperty>false</IsLinkProperty>

        </Field>

        <Field>

            <Name>name</Name>

            <Alias>姓名</Alias>

            <DbFieldName>FName</DbFieldName>

            <DataType>STRING</DataType>

            <AllowNull>false</AllowNull>

            <Length>100</Length>

            <IsLinkProperty>false</IsLinkProperty>

        </Field>

        <Field>

            <Name>number</Name>

            <Alias>编码</Alias>

            <DbFieldName>FNumber</DbFieldName>

            <DataType>STRING</DataType>

            <AllowNull>false</AllowNull>

            <Length>50</Length>

            <IsLinkProperty>false</IsLinkProperty>

        </Field>

    </FieldList>

</EnityModel>

实体元数据不仅能定义简单的字段,而且能定义实体之间的关联关系,下面是一个定义了关联类型的系统操作员数据实体:

<EnityModel>

    <Name>User</Name>

    <Alias>系统用户</Alias>

    <PackageName>com.cownew.PIS.base.permission</PackageName>

    <DbTableName>T_BS_User</DbTableName>

    <PrimaryKey>id</PrimaryKey>

    <FieldList>

        <Field>

            <Name>id</Name>

            <Alias>主键</Alias>

            <DbFieldName>FId</DbFieldName>

            <DataType>STRING</DataType>

            <AllowNull>false</AllowNull>

            <Length>50</Length>

            <IsLinkProperty>false</IsLinkProperty>

        </Field>

        <Field>

            <Name>number</Name>

            <Alias>账号</Alias>

            <DbFieldName>FNumber</DbFieldName>

            <DataType>STRING</DataType>

            <AllowNull>false</AllowNull>

            <Length>50</Length>

            <IsLinkProperty>false</IsLinkProperty>

        </Field>

        <Field>

            <Name>password</Name>

            <Alias>密码</Alias>

            <DbFieldName>FPassword</DbFieldName>

            <DataType>STRING</DataType>

            <AllowNull>false</AllowNull>

            <Length>50</Length>

            <IsLinkProperty>false</IsLinkProperty>

        </Field>

        <Field>

            <Name>person</Name>

            <Alias>对应人</Alias>

            <DbFieldName>FPersonId</DbFieldName>

            <DataType>STRING</DataType>

            <AllowNull>false</AllowNull>

            <Length>50</Length>

            <IsLinkProperty>true</IsLinkProperty>

            <LinkType>MANYTOONE</LinkType>

            <LinkEntity>/com/cownew/PIS/basedata/Person.emf</LinkEntity>

            <CascadeType>none</CascadeType>

            <Inverse>false</Inverse>

        </Field>

    <Field>

            <Name>isFreezed</Name>

            <Alias>是否被冻结</Alias>

            <DbFieldName>FIsFreezed</DbFieldName>

            <DataType>BOOLEAN</DataType>

            <AllowNull>false</AllowNull>

        </Field>

    </FieldList>

</EnityModel>

这个元数据的定义和Person类似,唯一的区别在于这里定义了一个“person”字段关联到“Person”实体:

<Name>person</Name>

<Alias>对应人</Alias>

<DbFieldName>FPersonId</DbFieldName>

<DataType>STRING</DataType>

<AllowNull>false</AllowNull>

<Length>50</Length>

<!—此字段是关联字段-->

<IsLinkProperty>true</IsLinkProperty>

<!—与被关联实体是“多对一”的关系-->

<LinkType>MANYTOONE</LinkType>

<!—关联实体路径是/com/cownew/PIS/basedata/Person.emf-->

<LinkEntity>/com/cownew/PIS/basedata/Person.emf</LinkEntity>

<CascadeType>none</CascadeType>

<Inverse>false</Inverse>   

对于关联字段只要设置IsLinkProperty为true,在LinkType标记内指定关联的类型,在LinkEntity中指定关联的实体路径(注意实体路径以“/”分割,并且全部是相对于根包的相对路径)即可。对于“一对多(ONETOMANY)”类型的字段还需要添加“<KeyColumn>***</KeyColumn>”标记表示被关联实体通过哪个字段反向关联本实体。

能够定义实体、定义字段、字段类型、实体关联、并定义了一些平台特有属性,这就是一个比较完备的实体元数据模型了。

7.3.2  元数据编辑器

虽然元数据模型是比较简单易懂的,但是手工编写这样的元数据文件仍然是低效且易出错的,直接查看元数据源文件也是非常烦琐的,为此我们开发了一个元数据文件的编辑器,使用此编辑器就可以通过可视化的界面编辑和查看实体元数据文件。编辑器还内置了代码生成功能,可以根据实体元数据文件生成JavaBean文件和ORM配置文件,目前仅支持Hibernate,不过由于设计时考虑到了可扩展问题,所以可以很轻松地支持其他ORM工具的代码和配置文件的生成。

这个元数据文件的编辑器是基于Eclipse的插件机制进行开发的。本书不假定也不强迫用户使用任何IDE,所以这里不介绍这个插件的实现原理。这里只简单介绍一下这个插件的使用,读者可以将此插件移植到当前使用的IDE上,当然也可以将其开发成一个独立的应用程序。

【例7.2】一个销售小票的建模过程(元数据编辑器的使用)。

下面以一个销售小票的建模过程来演示一下元数据编辑器的使用,图 7.1是销售小票的类图。

 

图7.1  销售小票类图

(1) 安装Eclipse,安装CowNewStudio插件。

在工程根目录下创建一个名字为“metadata”的文件夹,也可以直接打开案例工程,这个工程已经建立好了“metadata”文件夹以及常用的实体元数据。本例子中假定您使用的是案例工程。

(2) 在metadata/com/cownew/目录下创建文件夹demo。

在demo文件夹上右击,在弹出的快捷菜单中选择【新建】|【其他】命令,弹出向导对话框,如图7.2所示,选中CownewStudio节点下的Entity Model File creation wizard,单击【下一步】按钮。

(3) 进入如图7.3所示的新建界面,在【文件名】文本框中输入Goods.emf,然后单击【完成】按钮。

图7.2  选择向导

图7.3  选择所在文件夹

(4) 然后系统会自动用实体元数据编辑器打开此元数据文件,如图7.4所示。

编辑器的主要选项卡有两个,其中config选项卡为元数据文件的可视化编辑界面,而Goods.emf选项卡为元数据文件的源码编辑器,可以直接在此处编辑元数据文件的源码。

在可视化编辑选项卡中,Name、PackageName因为是系统预设的,所以是不可编辑的。在Alias中输入“商品”,在DBTableName中输入“T_Demo_Goods”。

编辑器左下方的空白区域是字段列表区,实体定义的字段在此展示,可以单击add按钮新增字段,单击remove按钮删除选定的字段。字段属性的编辑在eclipse的属性视图中进行,可以通过选择【窗口】|【显示视图】|【属性】命令打开此视图,可以通过单击编辑器中的快捷按钮open properties views来打开属性视图。

图7.4  元数据编辑器

(5) 单击add按钮增加id字段,在如图7.5所示的属性视图中编辑字段属性。

图7.5  属性视图

(6) 按照同样方式增加number、name字段。

在PrimaryKey下拉列表框中选择id作为主键。然后单击Eclipse的保存图标完成商品元数据的建模。

按照同样的步骤建立SaleBill实体元数据,增加id、number、saleDate属性。在增加saler属性的时候,此属性关联着系统中已经建立的Person元数据,因此设置isLinkProperty为true,设置完毕后属性视图中的属性比普通属性多了一些内容,主要是linkEntity、linkType、casadeType等。单击linkEntity属性右边的浏览按钮,如图7.6所示,选择系统中已经定义好的“Person元数据”。

选择linkType属性为MANYTOONE。SaleBillDetail元数据没有建立,所以暂时不增加details属性。

(7) 按照同样步骤增加“SaleBillDetail”实体元数据。

回到SaleBill实体元数据编辑界面,增加details属性,设置linkedEntity指向SaleBillDetail实体,设定linkType属性为OneToMany,从keycolumn属性的下拉列表框中选择FHeadId属性,表示SaleBillDetail实体通过FHeadId字段指向SaleBill实体。

 

图7.6  选择关联元数据

(8) 建模完毕,下面开始生成代码和配置文件。同时选中Goods.emf、SaleBill.emf、SaleBillDetail.emf三个文件,右击,在弹出的快捷菜单中选择CownewStudio∣Generate Code from Model File命令,弹出如图7.7所示的界面。

图7.7  代码生成选项

(9) Target ORM为生成的文件对应的ORM类型,目前支持Hibernate2和Hibernate3。按照图7.7进行设置,单击【完成】按钮,然后在Eclipse中就可以看到生成的文件了,如图7.8所示。hbm配置文件生成在bizLayer包下,JavaBean生成在common包下。

图7.8  生成的代码和配置文件

<!-- page -->

分享到:
评论

相关推荐

    数据仓库系统中元数据的研究与应用

    Microsoft Meta Data Service是一个提供元数据管理功能的服务组件,可以帮助组织管理和维护元数据。而OIM则是一种开放的标准模型,用于描述企业信息架构中的实体、属性和关系。 通过上述分析,我们可以看出,元数据...

    分子:用于Datomic数据库的Scala meta-DSL

    Molecule利用Scala的元类(Metaclass)和类型推断等特性,构建了一种用户友好的API,使开发者能够在编写代码时直接操作Datomic的查询结构。 ### 2. Datomic数据库 Datomic的独特之处在于它的设计理念。它将数据库...

    自动生成Mybatis 实体类、DaoMapper、XML可视化界面工具

    - `META-INF`:元数据信息,通常包含服务配置和服务提供者信息。 总之,这个工具为Mybatis开发提供了极大的便利,通过可视化的界面,开发者可以快速生成和管理实体类、Mapper接口以及XML映射文件,极大地提高了...

    Ejb3中的注释常用属性

    4. **实体Bean的元数据注解** - `@Entity`: 标记一个类作为实体Bean。 - `@Table`: 指定实体Bean对应的数据库表名。 - `@Column`: 定义字段与数据库列的映射,包含`name`(列名)、`unique`(是否唯一)、`...

    spring-jpa(hibernate实现)环境搭建

    `META-INF`目录通常是Java应用中的元数据目录,包含如MANIFEST.MF文件,用于描述JAR包的信息,但在这个场景下未提供具体文件,所以无法给出更多细节。在实际项目中,它可能包含Hibernate的映射文件或者自定义的实体...

    how-to-ejb-cmpblob

    CMP通过EJB机构定义的XML元数据来描述实体Bean与数据库表之间的映射关系,使得数据操作可以简化为对Bean方法的调用。 BLOB是数据库中用于存储大对象的数据类型,如图像、音频、视频或任何二进制数据。在EJB应用中,...

    EJB中的注释.pdf

    在实体Bean中,元数据注解用于提供关于实体类及其属性的信息。 - **`@Entity`**:标记类为实体Bean。 - **`@Table`**:指定实体Bean对应的数据库表名。 - **`@Column`**:定义映射到列的所有属性,如列名、是否唯一...

    Master Data Management

    2. **元数据控制**:管理关于数据的数据,即元数据,帮助理解数据的含义、来源和用途。 3. **数据治理**:建立一套政策和流程来管理数据资产,确保其质量和安全性,并符合法规要求。 #### Oracle MDM解决方案 ...

    Meta-Modeling

    在这个过程中,元模型是元数据的结构框架,它定义了模型元素的类型、关系以及它们的行为。下面我们将深入探讨元建模的概念、应用和相关技术。 元模型的层次结构通常分为三个级别:基础元模型、领域元模型和实例元...

    springMVC+hibernate maven增删改查加分页

    - `META-INF` 通常包含项目元数据,如 MANIFEST.MF 文件,用于描述项目信息。 总的来说,这个项目提供了从基础层面理解如何结合 SpringMVC 和 Hibernate 实现数据操作的实例,同时通过 Maven 管理依赖,使用分页...

    前端html笔记

    4. **元数据 (Meta Data)** - **元数据标签**:`&lt;meta&gt;`,用于定义文档的各种元数据。 - **常见元数据** - **author**: 定义文档作者。 ```html &lt;meta name="author" content="bnbbs"&gt; ``` - **description**...

    复习指南1

    2. **Meta-data concept**(元数据概念):元数据是关于数据的数据,例如数据的创建日期、大小、格式、位置等。在数据库中,元数据帮助用户和系统理解数据的结构和属性。 3. **Data independence concept**(数据...

    PowerDesigner使用教程

    6. **元数据交换(Meta-Data Exchange, MDE)**:允许在不同模型之间导入导出元数据,促进不同工具间的数据共享。 三、《PDM&PB入门教程》.chm 这个.chm文件很可能包含了关于PDM(Physical Data Model)和PB(Power...

    主数据管理MDM详细介绍

    与元数据(Meta Data)的区别在于,主数据是实际业务实体的具体实例,如产品信息、客户资料,而元数据是对这些数据的描述和属性,如数据字段的定义、数据来源等。MDM专注于实例数据的管理,而元数据管理则关注于帮助...

    应用源码之QuickSearchBox.zip

    - **SearchableInfo**: 代表一个可搜索的实体,包含了关于搜索服务的信息,如元数据、搜索意图过滤器等。 - **ContentProvider**: 应用程序需要实现ContentProvider来暴露自己的数据供QSB查询。 3. **源码学习...

    Spring5.0中文开发手册

    - Spring IoC容器使用配置元数据来了解如何创建和配置bean。这些元数据可以是XML文件或Java注解的形式。 - **3.2.2 实例化容器** - 解释了如何根据配置元数据实例化Spring容器。 - **3.2.3 使用容器** - 展示了...

    JPA的学习笔记(java注解,事物)

    它支持两种元数据形式:XML和JDK 5.0注解。作为一套ORM规范,JPA允许开发者使用面向对象的方式进行数据库操作,而无需直接处理SQL语句。 #### 实体概念 - **实体**(Entity):在JPA中,实体通常指的是应用程序中...

    parancoe-reference-guide.pdf

    Parancoe Meta-Framework 2.x 是一个强大的 Java 元框架,它集成了多种成熟的技术栈,极大地简化了 Web 应用的开发过程。通过遵循其约定和最佳实践,开发者可以更快地构建出高质量的应用程序,同时保持代码的简洁性...

Global site tag (gtag.js) - Google Analytics