ORM原理
原理:
1.实现JavaBean的属性到数据库表的字段的映射:
--通过配置文件将JavaBean的属性与数据库表的字段的关联起来
2.映射关系:
一对多,多对一等
持久层(Persistence Layer):专注于实现数据持久化应用领域的某个特定系统的一个逻辑层面,将数据使用者和数据实体相关联。
数据持久化:数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中数据模型的统称。数据模型可以是任何数据或对象模型,存储模型可以使关系模型、XML、二进制等
O/R M:
目的:利用面向对象的多台处理业务逻辑,而不是繁多的 if else
特征:
--关联以及与此相关的Lazy Load, O/R M是如何管理类之间的关联.当然这不仅于O/R M有关与设计者的设计水平也有很大关系.
--O/R M对继承关系的处理.
--O/R M对事务的支持.
--O/R M对查询的支持
内涵:
应用面向对象的思想,而不是纯粹的关注如何保存数据,将CRUD这些操作放入对象
对象关系映射:
目的:面向对象与关系数据库不匹配的问题
特征:描述对象和数据库之间的元数据
本质:将数据从一种形式转换为另一种形式
内涵:
业务实体:
--在内存中以对象的形式表现
--在数据库中以关系数据的形式表现
现象:对象具有继承、多态等特性,关系数据库是无法表达这些关系的
在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。
透明性:在计算机技术中,一种本来是存在的事物或属性,但从某个角度看似乎不存在,称为透明性现象
例:qq之间的对话表面上看在qq与qq之间进行,实际上是qq与传输层进行
O/R映射层是持久层的一个特例,它的数据模型是对象模型(Object),存储模型是关系模型(Relational),cmp和Hibernate是对象模型到关系模型之间转换的两种不同实现。由于对象模型和关系模型应用广泛,所以很多人错误的认为数据持久层就是对象模型到关系型数据库的转换,其实持久化的范围更广一些。
案例1:
持久层(Persistence Logic):
EJB:
Entity Bean:包含持久层逻辑
特征:
·BMP实现,还要实现相关的persistence logic
·CMP有容器的支持,使得 persistence的实现不再需要用户
太费神
·查询数据库相关对象需要Entity中的home接口
自身的行为放到了XXXEntityManager
缺点:
失去了面向对象的特征,变成了结构化的模型,类成了一个数据和函数的包装体
dao模式:某种程度上解决了持久层逻辑的分离
特征:将dao从Entity Bean中分离了出来,没有破坏Bean的内部实现没有完全解决业务逻辑和持久层逻辑分离问题
猜想:对象自身的属性的变化(业务逻辑影响),要体现到数据库中,怎样能避免在业务逻辑中操作持久层逻辑时能将对象的状态变化,体现到数据库中?
--在完成一个业务逻辑后自动的检测到对象状态所发生的变化.随后在事务提交时,将发生的变化保存到数据库中
案例2:
Entity:实体(类似于j2ee中的Entity Bean)通常指一个承载数据的对象, 但是注意它也是可以有行为的! 只不过它的行为一般只操作自身的数据.
Domain Object:对象最重要的特性在于它拥有行为. 仅仅拥有数据,你可以称它为对象, 但是它却失去它最重要的灵魂.
需要和别的对象(不是Value Object)打交道的对象,我就不再称其为实体. 领域模型就是指由这些具有业务逻辑的对象构成的模型.
POEAA:
Table Gateway:以表为单位的实体集合,基本没有行为,只有CRUD操作.
Row Gateway:以行为单位的实体,基本没有行为,只有CRUD操作.
Active Record:以行为单位的实体,拥有一些基本的操作自身数据的行为(如上例中的GetName),同时包含有CRUD操作
Active Record中是充满了SQL语句的(不像orm的SQL透明), 所以有人想起来利用O/R m来实现"Active Record", 虽然在他们眼里看起来很方便, 其实根本就是返祖.
Data Mapper:这才是真正的O/R m,Hibernate等等工具的目标.
案例3:
hibernate:
重要特征:缓存机制
基本特征:
--Hibernate会监视对象的变化.所有的更新只要在事务提交的时候就会保存到数据库中(透明性)
--将持久层逻辑从业务逻辑中分离
实现Transparent persistence我认为是Hibernate最为成功的地方之一, 也是高层的O/R M应该起到的作用.动态生成SQL语句只是实现这一目的的手段之一, 不要把它作为O/R M的实质.
业务逻辑(Business Logic):
1.从Persistence的角度Business Logic的分类:
涉及属性改动,需要反映到Persistence Layer的Business Logic (需要Facade的事务包装)
仅仅读取相关属性, 没有需要反映到持久层的Business Logic
2.从Domain Object角度对Business Logic的分类:
由一个根(Root)Domain Object通过直接的属性关联实现的Business Logic(dependent object)
由多个独立的Domain Object通过Facade联系起来一起完成的Business Logic(session bean)
ORM原理的更多相关文章
- Hibernate的ORM原理和实现
>>Hibernate和ORM ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样 ...
- [Data Access] ORM 原理 (11): 效能議題
這絕對是 ORM 的使用者,開發人員與 DBAs 共同想要問的議題,到底我使用了 ORM 和使用傳統的 ADO.NET 下 SQL 指令的方式會差多少? 這個問題不但會發生在 Entity Frame ...
- sqlx操作MySQL实战及其ORM原理
sqlx是Golang中的一个知名三方库,其为Go标准库database/sql提供了一组扩展支持.使用它可以方便的在数据行与Golang的结构体.映射和切片之间进行转换,从这个角度可以说它是一个OR ...
- Mego(03) - ORM框架的新选择
前言 从之前的两遍文章可以看出ORM的现状. Mego(01) - NET中主流ORM框架性能对比 Mego(02) - NET主流ORM框架分析 首先我们先谈下一个我们希望的ORM框架是什么样子的: ...
- java基础强化——深入理解java注解(附简单ORM功能实现)
目录 1.什么是注解 2. 注解的结构以及如何在运行时读取注解 2.1 注解的组成 2.2 注解的类层级结构 2.3 如何在运行时获得注解信息 3.几种元注解介绍 3.1 @Retention 3.2 ...
- orm的设计思路
一,我们先搞懂什么是orm? ORM:对象关系映射(Object Relational Mapping,简称ORM),目的是想像操作对象一样操作数据库.因为数据库不是面向对象的,所以需要编程进行映射. ...
- “造轮运动”之 ORM框架系列(三)~ 干货呈上
这一趴里面,我就来正式介绍一下CoffeeSQL的干货. 首先要给CoffeeSQL来个定位:最开始就是由于本人想要了解ORM框架内部的原理,所以就四处搜寻有关的博客与学习资料,就是在那个夏天 ...
- 手撸ORM浅谈ORM框架之基础篇
好奇害死猫 一直觉得ORM框架好用.功能强大集众多优点于一身,当然ORM并非完美无缺,任何事物优缺点并存!我曾一度认为以为使用了ORM框架根本不需要关注Sql语句如何执行的,更不用关心优化的问题!!! ...
- 手撸ORM浅谈ORM框架之Add篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
随机推荐
- Codeforces 676E The Last Fight Between Human and AI 规律
链接 Codeforces 676E The Last Fight Between Human and AI 题意 给一个多项式,有些系数不确定.人和机器轮流填系数,系数可以是任何数,问是否能使得最后 ...
- FastJSON杂项
//通过TypeReference解决泛型的问题 List<Integer> rst = JSON.parseObject(v,new TypeReference<List<I ...
- javax.validation注解使用
@Pattern(regexp = "^[0-9]*$",message = "完成比例(进度)必须是数字")
- Maven配置文件中配置指定JDK版本
1. 在setting.xml文件中的<profiles>标签加入如下配置: <profile> <id>jdk-1.8</id> <activa ...
- 四个例子实战讲解.htaccess文件rewrite规则(转)
一.防盗链功能 1 2 3 4 RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC] Rewrite ...
- 一、数组---数组中的K-diff数对※※※※※
给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff 数对.这里将 k-diff 数对定义为一个整数对 (i, j), 其中 i 和 j 都是数组中的数字,且两数之差的绝对值是 k ...
- 简洁的MVC思想框架——Nancy(Session的使用)
前文提到关于Nancy中GET和POST以及外部引用图片,css和JS的文件等操作.今天所讲的是Nancy关于Session相关操作. Session作为web开发中极其重要的一部分,而Nancy中S ...
- [APIO2016]Gap
题目:UOJ#206. 题目大意:由于过于冗长,不好解释,所以详见原题. 解题思路:这是一道交互题. 对于第一问,很容易解决.由于数列严格递增,所以不会出现相等的情况. 首先调用MinMax(0,10 ...
- C语言回调
来源:https://www.cnblogs.com/jiangzhaowei/p/9129105.html 1. 什么是回调函数? 回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢 ...
- Java设置Client Socket链接Server超时时间
Java设置Client Socket链接Server超时时间 学习了:http://blog.csdn.net/tterminator/article/details/52494141 http:/ ...