丄諦啲仇魜ヤ
如 果 敌 人 让 你 生 气 , 那 说 明 你 没 有 胜 他 的 把 握!
BlogJava
首页
新随笔
新文章
联系
聚合
管理
posts - 6,comments - 56,trackbacks - 1
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
QQ: 315480381
MSN: wangsq777@126.com
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔分类
生活的滋味(3)
随笔档案
2009年4月 (1)
2008年10月 (1)
2008年9月 (1)
2008年8月 (1)
2008年5月 (1)
2008年2月 (1)
文章分类
AJAX(5)
ANT(1)
DIV+CSS
DWR(3)
EXT2.0(6)
FLEX(5)
hibernate(9)
JavaScript和CSS(26)
java反射机制(2)
JAVA基础(12)
JDOM操作XML(1)
JreeChart使用(3)
JSF(5)
Jsp+Struts(18)
lucene-2.0与compass(1)
spring(6)
Tomcat(2)
分页(2)
大杂烩(3)
数据库(16)
模式(2)
算法(1)
文章档案
2009年4月 (8)
2009年3月 (1)
2008年12月 (6)
2008年11月 (6)
2008年9月 (1)
2008年7月 (1)
2008年5月 (13)
2008年4月 (10)
2008年3月 (9)
2008年2月 (1)
2008年1月 (6)
2007年12月 (11)
2007年11月 (9)
2007年10月 (10)
2007年9月 (37)
相册
JAVA
我喜欢的
雪挂
博客
cloudgamer (js)
heimeiyingwang
Fdream's Blog( mootools ,js)
JACK
kekemao1
liaojiyong
macaque1101(oracle)
一个不错的BOLG
小何
小巩子
李少群(jsf)
银河使者
帮助
HTML CSS
JPA 批注参考
天气预报样式 天气预报代码和演示
常用广告代码
颜色代码
看见的好东西
ssh大家庭
Struts和Spring三种整合
浪曦视频在线
用JFreeChart增强JSP报表的用户体验(阿密果)
网站
Appfuse中文论坛
hibernate官方网
itpub技术门户网站
java开源
JAVA解决之道
JS 无忧脚本论坛
PHP社区
spring 参考手册
spring 官方网站
spring中文论坛
满江红
搜索
最新评论
1. re: Spring简介
评论内容较长,点击标题查看
--zuidaima
2. re: 去掉textArea和input的边框[未登录]
根本就不能用
--111111
3. re: DIV生成滚动条
DIV生成滚动条
--DIV生成滚动条
4. re: hibernate分页1
对不上号啊,你的项目不全,我也出现以上错误!!
--婉儿
5. re: EXT2.0 做的登陆界面 [未登录]
写一个简单有效的,不要写些长而没用的。
--jack
阅读排行榜
1. 如何用java程序 将 pdf如何转换成word ???(571)
2. 抵制日货-在北大校园BBS引起轰动的一篇文章(537)
3. 食物(285)
4. 创建一个文件夹(283)
5. 叫你一声老公(275)
评论排行榜
1. 抵制日货-在北大校园BBS引起轰动的一篇文章(5)
2. 食物(1)
3. 呜呜....(1)
4. 创建一个文件夹(0)
5. 叫你一声老公(0)
ORM
对象关系映射
(
Object Relational Mapping
,简称
ORM
)是一种为了解决
面向对象
与关系
数据库
存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述
对象
和数据库之间映射的
元数据
,将java
程序
中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 这也同时暗示者额外的执行开销;然而,如果ORM作为一种
中间件
实现,则会有很多机会做优化,而这些在手写的持久层并不存在。 更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG规范的对象数据库依然需要
类
级别的元数据。
对象-关系映射
(
Object
/Relation Mapping,简称ORM),是随着面向对象的
软件开发
方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是
业务实体
的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
面向对象是从
软件工程
基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。
让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和
用户界面层
中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。
当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。而这些代码写起来总是重复的。
如果打开你最近的程序,看看DAL代码,你肯定会看到很多近似的通用的
模式
。我们以保存对象的方法为例,你传入一个对象,为SqlCommand对象添加SqlParameter,把所有属性和对象对应,设置SqlCommand的CommandText属性为存储过程,然后运行SqlCommand。对于每个对象都要重复的写这些代码。
除此之外,还有更好的办法吗?有,引入一个O/R Mapping。实质上,一个O/R Mapping会为你生成DAL。与其自己写DAL代码,不如用O/R Mapping。你用O/R Mapping保存,删除,读取对象,O/R Mapping负责生成
SQL
,你只需要关心对象就好。
对象关系映射成功运用在不同的面向对象持久层产品中,如:Torque,OJB,Hibernate,TopLink,
Castor
JDO
, TJDO 等。
一般的ORM包括以下四部分:
一个对持久类对象进行CRUD操作的
API
;
一个语言或API用来规定与类和类属性相关的查询;
一个规定mapping metadata的工具;
一种技术可以让ORM的实现同事务对象一起进行dirty checking, lazy association fetching以及其他的优化操作。
一、目前流行的 ORM 产品
目前众多厂商和
开源
社区都提供了持久层
框架
的实现,常见的有:
Apache OJB (http://
db
.apache.org/ojb/)
Cayenne (http://objectstyle.org/cayenne/)
Jaxor (http://jaxor.sourceforge.net)
Hibernate (http://www.hibernate.org)
iBatis (http://www.ibatis.com)
jRelationalFramework (http://ijf.sourceforge.net)
mirage (http://itor.cq2.org/en/oss/mirage/toon)
SMYLE (http://www.drjava.de/smyle)
TopLink (http://otn.
oracle
.com/products/ias/toplink/index.html)
其中 TopLink 是 Oracle 的商业产品,其他均为开源项目。
其中 Hibernate 的轻量级 ORM 模型逐步确立了在 Java ORM
架构
中领导地位,甚至取代复杂而又繁琐的
EJB
模型而成为事实上的 Java ORM 工业标准。而且其中的许多设计均被
J2EE
标准组织吸纳而成为最新 EJB 3.0 规范的标准,这也是开源项目影响工业领域标准的有力见证。
二、对象-关系映射模式
从《公共仓库元模型:开发指南》一书第8章CWM元仓库中摘录出来的内容,实现了公共仓库元模型(CWM)的
UML
图到Microsoft
SQL Server
数据库的映射,是一种将对象层次结构映射成关系型结构的方法。个人认为可以作为将本体(
Ontology
)
文件
存储到关系型数据库中的一种可借鉴方法。
基本情况:公共仓库元模型(CWM)是对象管理组织(OMG)的一种和
数据仓库
相关的元模型标准,采用UML表示的对象层次结构,在保存到数据库中时由于面向对象的数据库技术的不完善(理论研究和商业应用都不是主流),所以该书的作者倾向于使用成熟的关系型数据库来保存-这也是存储本体时所遇到的问题。
采用方法:将UML模型中的各种元素通过转换,保存为数据库模式。由于CWM是一种元模型,因此模型的实例也是一种模型,将这种实例以数据库数据的形式保存。使用数据库中比较成熟的存储过程技术提高开发和执行效率。
1、数据
类型
映射模式
1.1简单数据类型模式:建立UML和关系型数据库中简单数据类型的映射表以指导映射。
1.2枚举数据类型模式:每种枚举类型对应一个表,只有一个列(_EnumLiteral)表示枚举值。
1.3基于类的数据类型模式:使用外键约束,将基础列与基于类的类型实例相关联。
2、类映射模型
每个类对应一个表。单值属性、多值属性、继承关系可以用下述方法映射,而引用属性将在关联映射模式中提到。
2.1单值属性模式:是cardinality的上界为1的属性,映射到类所对应的表的列上。若其下界也为1(必须有的属性),列属性为NOT NULL。
2.2多值属性模式:每个多值属性映射成一个独立的表,使用外键连接到类所对应的表上。
2.3继承模式:每加入一个类的实例时,根据其继承关系自顶向下生成每个类的对象,这些对象具有相同的ID(根对象对应记录的主键)。删除对象实例时,自底向上删除数据。遇到从中间删的情况怎么办?多重继承怎么处理?(金龙飞)
3、关联映射模式
3.1一对一关联模式:在关联两端各加一列。
3.2一对多关联模式:和3.1一样。如果多这端是有序的,还需加入一列表示序号。
3.3多对多关联模式:将关联单独作一个表。
3.4组合关联模式:注意级联式删除。
3.5反演关联模式:关联两端指向相关的类型,和普通关联一样。
3.6成对关联模式:关联记录两个类间的关系,用交集类表示关联,表示成一个单独的表,每个关联对应一个表,用外键表示它们间的关系。
3.7关联上的OCL需要分析成对应的存储过程代码。
3.8保证关联的cardinality也需要分析成对应的存储过程代码。
4、引用映射模式
在UML中不存在的MOF特征,指属性是声明为引用类型的实例。用存储过程实现。
posted on 2007-09-01 14:44
Crying
阅读(244)
评论(0)
编辑
收藏
所属分类:
hibernate
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
相关文章:
hibernate hql 大全(转)
持久层的3种状态
Hibernate的检索策略小结
one-to-many 和one-to-one
Hibernate中的一个表对应多个VO
Hibernate中继承
ORM
PO VO BO DTO POJO DAO 之间的关系(转载)
HIBERNATE中重要的接口