- 浏览: 216859 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (121)
- 投资杂记 (6)
- Java技术 (46)
- 记忆 (7)
- 科技随笔 (6)
- 随感 (8)
- 漫谈云计算 (4)
- 生活点滴 (1)
- andriod笔记 (13)
- mysql-数据库 (2)
- OSGI (1)
- Spring Data JPA (1)
- gradle maven nexus (1)
- Java性能优化 多核线程 优化 (2)
- Open-Erp (oe) (8)
- Java技术 camel (1)
- jetty camel dynamicRouter (1)
- karaf (1)
- amqp apollo camel karaf (1)
- Java技术 MyCat (1)
- Java技术 并行调用 线程池 (1)
最新评论
-
白云天:
主机网络端口使用命令: netstat -nplt
centos7.4上安装mysql5.7记录 -
白云天:
登录到 容器内部 docker ps -a查询容器IDsudo ...
docker初探 -
白云天:
export jars to local directory ...
Camel的direct,Bean测试 -
白云天:
location /esb/ { proxy_ ...
Camel的direct,Bean测试 -
白云天:
centos 中添加 shell_script.sh 为开机启 ...
Camel的direct,Bean测试
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 -->
发表评论
-
docker初探
2017-08-17 16:49 6231、docker , 先从仓库中下载一个和自己的 ... -
java-nio的hello-word
2017-04-27 17:55 504重点注意:有说明的地 ... -
Java NIO 系列教程
2015-07-02 14:28 885Java NIO提供了与标准IO不同的IO工作方式: ... -
随手记录-设计目录中的jar到类路径
2015-05-07 18:01 791@echo off color 7 SetLocal Enab ... -
gradle和maven结合nexus服务解决jar包依赖
2014-07-17 11:00 16361、架设 nexus nexus 的基础不多讲了,去官网下载 ... -
利用注解定义SQL语句,实现类是iBatis的数据库访问
2014-06-25 18:04 3541import java.lang.annotation.*; ... -
使用 Spring Data JPA 简化 JPA 开发(Spring Data JPA 开发指南)
2014-06-11 15:46 710从一个简单的 JPA 示例开始 本文主要讲述 Spring D ... -
My-sql批量更新或者插入的SQL
2013-09-25 17:03 1386My-sql批量更新或者插入的SQL,高效, MyBatis中 ... -
加减的艺术用于工作学习管理
2013-02-17 17:12 746回顾做过的事情,总结起来,就是先加,后减,再加。 不是吗? ... -
记录到内存的Logger,可用于web动态显示内容的来源
2013-02-17 09:35 1835import java.io.ByteArrayOutputS ... -
一个表达式计算工具
2012-11-21 12:57 783可以计算: 加减乘除,余数,括号 , 结果为整数,操作数全部为 ... -
ms-sql-server获取某表的当前可用的自增值
2012-01-10 09:46 920执行 SQL : select IDENT_CURRENT( ... -
一个加密数字和逗号且减少空间的算法
2010-11-09 17:19 1337注意本算法只能处理由 0,1,2,3,4,5,6,7,8, ... -
云计算笔记
2010-09-01 14:13 809最近得闲,去了解下 hadoop系统,下面为过程记录: 1、 ... -
在MySql上实现Replication(Master 与 Slave 数据同步)
2010-04-23 17:54 1150假设这里有三个数据库分别为 d1、d2、d3,其中d ... -
在一台windows机器上如何安装多个Mysql
2010-04-23 17:41 34161、将mysql程序直接拷贝到某个目录(假设目录为d:\mys ... -
MySQL复制配置步骤文档(主从备份机制)
2010-03-30 10:14 1881本文档主要对一个主服务器,一个从服务器(简称一主一从)的复制配 ... -
如何得到SqlServer的自增ID
2010-03-16 11:09 5958转自:http://hi.baidu.com/vc60/blo ... -
J2EE集群
2010-01-04 15:29 3633对于理解J2EE集群技术不 ... -
JDBC 调用存储过程的整理
2010-01-04 14:30 1054String sqls = this.getSqls().ge ...
相关推荐
Microsoft Meta Data Service是一个提供元数据管理功能的服务组件,可以帮助组织管理和维护元数据。而OIM则是一种开放的标准模型,用于描述企业信息架构中的实体、属性和关系。 通过上述分析,我们可以看出,元数据...
Molecule利用Scala的元类(Metaclass)和类型推断等特性,构建了一种用户友好的API,使开发者能够在编写代码时直接操作Datomic的查询结构。 ### 2. Datomic数据库 Datomic的独特之处在于它的设计理念。它将数据库...
- `META-INF`:元数据信息,通常包含服务配置和服务提供者信息。 总之,这个工具为Mybatis开发提供了极大的便利,通过可视化的界面,开发者可以快速生成和管理实体类、Mapper接口以及XML映射文件,极大地提高了...
4. **实体Bean的元数据注解** - `@Entity`: 标记一个类作为实体Bean。 - `@Table`: 指定实体Bean对应的数据库表名。 - `@Column`: 定义字段与数据库列的映射,包含`name`(列名)、`unique`(是否唯一)、`...
`META-INF`目录通常是Java应用中的元数据目录,包含如MANIFEST.MF文件,用于描述JAR包的信息,但在这个场景下未提供具体文件,所以无法给出更多细节。在实际项目中,它可能包含Hibernate的映射文件或者自定义的实体...
CMP通过EJB机构定义的XML元数据来描述实体Bean与数据库表之间的映射关系,使得数据操作可以简化为对Bean方法的调用。 BLOB是数据库中用于存储大对象的数据类型,如图像、音频、视频或任何二进制数据。在EJB应用中,...
在实体Bean中,元数据注解用于提供关于实体类及其属性的信息。 - **`@Entity`**:标记类为实体Bean。 - **`@Table`**:指定实体Bean对应的数据库表名。 - **`@Column`**:定义映射到列的所有属性,如列名、是否唯一...
2. **元数据控制**:管理关于数据的数据,即元数据,帮助理解数据的含义、来源和用途。 3. **数据治理**:建立一套政策和流程来管理数据资产,确保其质量和安全性,并符合法规要求。 #### Oracle MDM解决方案 ...
在这个过程中,元模型是元数据的结构框架,它定义了模型元素的类型、关系以及它们的行为。下面我们将深入探讨元建模的概念、应用和相关技术。 元模型的层次结构通常分为三个级别:基础元模型、领域元模型和实例元...
- `META-INF` 通常包含项目元数据,如 MANIFEST.MF 文件,用于描述项目信息。 总的来说,这个项目提供了从基础层面理解如何结合 SpringMVC 和 Hibernate 实现数据操作的实例,同时通过 Maven 管理依赖,使用分页...
4. **元数据 (Meta Data)** - **元数据标签**:`<meta>`,用于定义文档的各种元数据。 - **常见元数据** - **author**: 定义文档作者。 ```html <meta name="author" content="bnbbs"> ``` - **description**...
2. **Meta-data concept**(元数据概念):元数据是关于数据的数据,例如数据的创建日期、大小、格式、位置等。在数据库中,元数据帮助用户和系统理解数据的结构和属性。 3. **Data independence concept**(数据...
6. **元数据交换(Meta-Data Exchange, MDE)**:允许在不同模型之间导入导出元数据,促进不同工具间的数据共享。 三、《PDM&PB入门教程》.chm 这个.chm文件很可能包含了关于PDM(Physical Data Model)和PB(Power...
与元数据(Meta Data)的区别在于,主数据是实际业务实体的具体实例,如产品信息、客户资料,而元数据是对这些数据的描述和属性,如数据字段的定义、数据来源等。MDM专注于实例数据的管理,而元数据管理则关注于帮助...
- **SearchableInfo**: 代表一个可搜索的实体,包含了关于搜索服务的信息,如元数据、搜索意图过滤器等。 - **ContentProvider**: 应用程序需要实现ContentProvider来暴露自己的数据供QSB查询。 3. **源码学习...
- Spring IoC容器使用配置元数据来了解如何创建和配置bean。这些元数据可以是XML文件或Java注解的形式。 - **3.2.2 实例化容器** - 解释了如何根据配置元数据实例化Spring容器。 - **3.2.3 使用容器** - 展示了...
它支持两种元数据形式:XML和JDK 5.0注解。作为一套ORM规范,JPA允许开发者使用面向对象的方式进行数据库操作,而无需直接处理SQL语句。 #### 实体概念 - **实体**(Entity):在JPA中,实体通常指的是应用程序中...
Parancoe Meta-Framework 2.x 是一个强大的 Java 元框架,它集成了多种成熟的技术栈,极大地简化了 Web 应用的开发过程。通过遵循其约定和最佳实践,开发者可以更快地构建出高质量的应用程序,同时保持代码的简洁性...