ORM的详解
有很多小伙伴都不太理解ORM是什么,其实不用想象的那么复杂。我们先根据3W1H去理解。
who:首先ORM可以立即为(Object/Relation Mapping): 对象/关系映射
what:其次ORM可以得到持久化对象
when:当需要满足Java对象得到持久化(即保存)的需求
how:因为ORM会将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。因此ORM的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。
个人理解,希望可以帮助到大家!
---------------------------------补充:----------------------------
对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。 —— [ 百度百科 ]
广义上,ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换。 狭义上,ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口。
什么是O,R,M?
O(对象模型):实体对象,即我们在程序中根据数据库表结构建立的一个个实体Entity。
R(关系型数据库的数据结构):即我们建立的数据库表。
M(映射):从R(数据库)到O(对象模型)的映射,可通过XML文件映射。
如图:当表实体发送变化时,ORM会帮助我们把实体的变化映射到数据库表。


为什么使用ORM?
提高开发效率:ORM框架自动实现Entity实体的属性与关系型数据库字段的映射。CRUD的工作则可以交给ORM来自动生成代码方式实现。隐藏了数据访问细节,“封闭”的通用数据库交互,他使得我们的通用数据库交互变得简单易行,并且完全不用考虑SQL语句。大大提高我们开发效率, 这样一来也减少我们维护一个复杂 缺乏灵活性数据访问层的成本。
ORM作为是一种思想,帮助我们开发人员跟踪实体的变化,并将实体的变化翻译成sql脚本,执行到数据库中去,也就是将实体的变化映射到了表的变化。这样会给我们带来非常大的便利。但有得必有失,便利的同时也无可避免的带来了一些其他的问题:比如性能降低,复杂的查询ORM仍然力不从心等。
不得不说,任何优势的背后都隐藏着缺点,这是不可避免的。问题在于,我们是否能容忍这些缺点。这需要结合项目的具体情况考虑使用这项技术是否利大于弊 。
这篇博客只是介绍了ORM这种思想,具体实现这种思想的框架已有很多,Herberate,iBatis,NHerberate,,EF等,这些框架都大同小异。下篇博客会以最近项目中使用的EF为例,给大家做详细的介绍。
原文:https://blog.csdn.net/u010028869/article/details/47094973
原文:https://blog.csdn.net/chenmissyu/article/details/80234623
ORM的详解的更多相关文章
- python/ORM操作详解
一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...
- ORM框架详解
.Net开源微型ORM框架测评 什么是ORM? 对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象 ...
- Android 常用的ORM框架详解
1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM.支持JDBC连接,Spring以及Android平台.语法中广泛使用了注解(Annotation ...
- 【ORM】--FluentNHibernate之基本映射详解
最近在做项目的时候用到了NHibernate,使用它并不困难,但是很麻烦.如果我的数据库有几百张表如果想要一个个的映射岂不是很麻烦,所以这种情况下使用NHibernate就会很笨重,虽然 ...
- .NET ORM框架 SqlSuagr4.0 功能详解与实践【开源】
SqlSugar 4.0 ORM框架的优势 为了未来能够更好的支持多库分布式的存储,并行计算等功能,将SqlSugar3.x全部重写,现有的架构可以轻松扩展多库. 源码下载: https://gith ...
- 2018.10.7 理解Hibernate的工作原理及其中的ORM详解
复习 hibernate框架 简介j及其搭建: hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库. 1 ...
- Django框架 之 ORM查询操作详解
Django框架 之 ORM查询操作详解 浏览目录 一般操作 ForeignKey操作 ManyToManyField 聚合查询 分组查询 F查询和Q查询 事务 Django终端打印SQL语句 在Py ...
- django ORM 外键详解
Django中的外键: 首先,为了方便理解,我们把使用ForeignKey的字段所在的表定义为从表,把ForeignKey中to参数连接的表称为主表. 外键使用的先决条件: 在mysql数据表中,数据 ...
- ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借
ASP.NET MVC深入浅出系列(持续更新) 一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...
随机推荐
- JavaScript模块化思想之入门篇
在写正文之前先写一点废话,从我大三下学期正式接触前端到现在,已经六个月了.自己从HTML,CSS,简单的JS验证开始,一点点开始走入前端的世界.越发的感觉前端这一领域散发着无穷的魅力,也许这和我真心喜 ...
- 03-Maven坐标管理
1.什么是坐标? 2.坐标的详细概念 3.Maven包引用
- [Usaco2009 Feb]Revamping Trails 道路升级 BZOJ1579
分析: 比较裸的分层图最短路,我的实现方式是,每次求出1所有节点的最短路,之后用每一个节点更新与其相连的节点(取较小值),之后做K次,就求出了分层图的最短路了. 附上代码: #include < ...
- 感言&2
我写下这些,不是为了向谁诉说我的苦难,我家庭的苦难,而只是想说,朋友,当你们能够坐在星巴克里点杯咖啡打开Macbook刷知乎,思考“人为什么努力”这样的问题时有无数个像我一样出身的孩子在拼命,不因为什 ...
- 20155207 《网络对抗》 Exp9 Web安全基础
20155207 <网络对抗> Exp9 Web安全基础 实验内容 关于WebGoat Cross-Site Scripting(XSS)练习 Injection Flaws练习 CSRF ...
- Android开发——RecyclerView特性以及基本使用方法(一)
)关于点击事件,没有像ListView那样现成的API,但是自己封装起来也不难,而且我们使用ListView时,如果item中有可点击组件,那么点击事件的冲突也是一个问题,而在RecyclerView ...
- SimpleDateFormat-时间格式化中的大小写字符
一.SimpleDateFormat: 这个类是用来格式化date类型数据为指定格式的时间的 使用的而时候,总是区分不清 yyyy-mm-dd yyyy-MM-dd 而使用不同的大小写字符格式化出来的 ...
- Source insight 中 标题栏路径显示完整路径的方法
在source insight 的标题栏中显示完整路径名的方法.Options -> Preferences -> Display -> Trim long path names w ...
- 解决 idea 中的 tomcat控制台 和cmd tomcat下的中文乱码问题(win10 64位)
原理:idea控制台里的日志默认是从tomcat的localhost.log 和 catalina.log 两个文件中读出来的. https://blog.csdn.net/zhaijingkui/a ...
- NodeJs学习一NodeJs初识
一.前言 按照惯例,先扯淡,就因为这货,现在才有了各大公司招聘的全栈工程师,正是因为它,让以前只会写前端的人也能写起后端服务器代码来了.所以呢,你招一个会NodeJs的前端,它都能把后端干了,一个人干 ...