orm说法正确的(什么是ORM)

2026-03-02 14:00:01 :0

orm说法正确的(什么是ORM)

今天给各位分享什么是ORM的知识,其中也会对什么是ORM进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录

什么是ORM

ORM是对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”。

(ORM is Object Relational Mapping (ORM, or O/RM, or O/R Mapping), a programming technique used to transform data between different types of systems in an object-oriented programming language. In effect, it creates a "virtual object database" that can be used in a programming language.)

拓展资料

ORM的由来:面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。

掌握java的那些技术,算是对java比较精通了

没有那么多学术的说法,只凭工作这些年的经验告诉你一些我的心得吧。
1、规范:编写的代码必须符合流行的编码规范,例如类名首字母大写,成员和方法名首字母小写,方法名的第一个单词一般是动词,包名全部小写等,这样程序的可读性才比较好。
2、JDK:必须熟悉JDK(Java Development Kit,Java开发工具箱——JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。)
3、测试:自己写的程序首先是能够通过自己的测试。
4、语法:必须比较熟悉,在写代码的时候,IDE(Integrated Development Environment,集成开发环境)的器对某一行报错应该能够根据报错信息知道是什么样的语法错误,并且知道任何修正。
5、排错:应该可以根据异常信息比较快速的定位问题的原因和大致位置。
6、思想:必须掌握OOP(Object Oriented Programming,面向对象编程)的主要要求,这样使用Java开发的系统才能是真正的Java系统。
7、工具:必须至少熟练使用一种IDE的开发工具,例如Eclipse、Netbeans、JBuilder、Jdeveloper、IDEA、JCreator或者Workshop,包括进行工程管理、常用选项的设置、插件的安装配置以及进行调试。
8、API(Application Programming Interface,应用程序编程接口):Java的核心API是非常庞大的,但是有一些内容笔者认为是必须熟悉的,否则不可能熟练的运用Java,包括:
java.lang包下的80%以上的类的功能的灵活运用。
java.util包下的80%以上的类的灵活运用,特别是集合类体系、规则表达式、zip、以及时间、随机数、属性、资源和Timer.
java.io包下的60%以上的类的使用,理解IO体系的基于管道模型的设计思路以及常用IO类的特性和使用场合。
java.math包下的100%的内容。
java.net包下的60%以上的内容,对各个类的功能比较熟悉。
java.text包下的60%以上的内容,特别是各种格式化类。
熟练运用JDBC. 80%、java.security包下40%以上的内容,如果对于安全没有接触的话根本就不可能掌握java.
AWT的基本内容,包括各种组件事件、监听器、布局管理器、常用组件、打印。
Swing的基本内容,和AWT的要求类似。
XML处理,熟悉SAX、DOM以及JDOM的优缺点并且能够使用其中的一种完成XML的解析及内容处理。
9、博学:掌握J2EE 、Oracle 、WebLogic、Jboss、Spring、Struts、Hibernate 等流行技术,掌握软件架构设计思想、搜索引擎优化、缓存系统设计、网站负载均衡、系统性能调优等实用技术。
10、管理:必须熟悉使用Ant(中文译为蚂蚁,是一种基于Java的build工具。)完成工程管理的常用任务,例如工程编译、生成javadoc、生成jar、版本控制、自动测试。

总结一下:做到前八点,就是个合格的java程序员了,9、10点就可以算是进阶了。

至于学习方法,没什么捷径,多做,多碰到错误,多改正,积累经验,不论是什么语言,都只是工具吧,核心是编程思想,是日积月累的经验。
希望对你有帮助。

ORM是否必要

ORM可以防止注入作为附加功能,SQL也可以带来反注入机制。ORM的主要作用是将数据库域的对象映射到面向对象的域中,因为开发人员更熟悉它们。


开发人员在开发时更倾向于用对象的方式思考

而他们更熟悉的用户有很多问题,而不是行、列和外键。面向对象的好处是在业务级重用,包括关联和业务逻辑。以上是OLTP和OLAP可能不同。使用ORM做OLAP分析不会有什么违反的感觉。

虽然大多数ORM工具还提供接口,如组,加入和总和,ActiveRecord实际上提供了内在的连接,它必须拼左连接和交叉连接,但它实际上并没有多大的帮助。

直接写作是最简单、最直接的方法。

因为在OLAP应用程序中,思维不是面向对象的,而是面向主题、维度和度量的核心。

ORM的基本含义是将这个抽象结构暴露到应用程序代码中。

当您直接访问数据库时,结构是外部的,在文档内部和程序员的头脑中。代码中没有物理对应关系。ORM为您提供了物理结构。

具体来说,当ORM时,您处理字段通信,当您使用SQL直接操作时,这很明显,您使用大脑将业务逻辑与SQL相匹配。

另一种方法是

通过ORM,抽象被构造并输入到应用程序代码中,这样就可以在代码中直接实现许多必要的约束,这有助于正确性。

为什么我说ORM是一种反模式


上周我在在上讨论了ORM,在那以后有人希望我澄清我的意思。事实上,我曾经写文章讨论过ORM,?但那是在一场关于SQL的大讨论的上下文中,我不应该把这将两件事情混为一谈。 因此,在本文中我将关注ORM本身。同时,我尽力保持简略,因为从我的SQL文章中显而易见



上周我在在上讨论了ORM,在那以后有人希望我澄清我的意思。事实上,我曾经写文章讨论过ORM,?但那是在一场关于SQL的大讨论的上下文中,我不应该把这将两件事情混为一谈。 因此,在本文中我将关注ORM本身。同时,我尽力保持简略,因为从我的SQL文章中显而易见的是:人们倾向于一旦读到让他们发怒的内容就会离开(同时留下一句留言,而不论他们所关注的东西是否在后面会讨论到)。
什么是反模式?
我很高兴地发现Wikipedia有一个相当全面的关于反模式的列表,包括来自编程界及其之外的内容。我之所以称ORM为反模式的原因是因为,反模式的作者定义了用来区分反模式和普通的坏习惯的两个条件,而ORM完全符合这些条件:
它开始的时候看起来很有用,但是从长期来看,坏处要大过好处
存在已验证并且可重复的替代方案
由于第一个因素导致了ORM令人抓狂(对我来说)的流行性:它第一眼看上去像是个好主意,但是当问题更加明显的时候,已经很难离开了。
这对ORM来说是什么意思?
我想说的主要问题在于?ActiveRecord,它由于 Ruby on Rails 而著名, 从那以后已经移植到了许多其他语言。然而,这些问题同样存在于其他的ORM层,比如Java的Hibernate和PHP的Doctrine。
ORM的优点
简单:一些ORM层告诉你它们“消除了对SQL的要求”。我至今仍然看到这种承诺在传播。其他一些会更加现实地声称它们可以减少手写SQL的需要,但是仍然允许你在需要的时候使用它。对于简单的模型以及项目的早期,这确实是一个优点:使用ORM,无疑你能够更快地开始启动。然而,你将会走向错误的方向。
代码生成:使用ORM从模型中消除用户层面的代码,这一做法开启了通向代码生成的大门。通过对schema的简单描述,“脚手架”模式可以为你的所有表生成一个可工作的界面。更加具有魔力的是,你可以修改你的schema描述,然后重新生成代码,从而消除了CRUD。同样,这在开始的时候确实是可行的。
性能“足够好”:我没有看到任何ORM层声称在性能上更加优越。很明显,为了代码的敏捷性需要付出性能的代码。如果哪里变慢了,你总是可以用更加有效的手写SQL覆盖你的ORM方法。不是吗?
ORM的问题
1. 不充分的抽象
ORM最明显的问题是它并不能完全从实现细节中抽象出来。所有主流ORM的文档中到处都引用了SQL的概念。其中一些介绍的时候并不会表明其在SQL中的等价物,而其他一些则将库看作用来生成SQL的过程函数。
抽象的要点在于它应该使问题得以简化。对SQL进行抽象,同时又要求你懂得SQL,这使得你需要学习的东西成倍增加了:首先,你必须理解你正在试图执行的SQL是什么,然后你还要学习ORM的API,来让它为你编写这些SQL。在Hibernate中,为了完成复杂的SQL你甚至需要学第三种语言:HQL,它几乎就是SQL(但又不完全是),其在幕后被翻译成SQL。
ORM的支持者会辩解说并非每个项目都是如此,并非每个人都需要复杂的join,并且ORM是一个"80/20"解决方案,其中80%的用户只需要SQL中20%的功能,ORM可以处理这些问题。我能说的是,我15年来编写web应用的数据库后端的经历表明,事实并非如此。只有在项目刚开始的时候你不需要join和本地join。在那之后,你就要优化和巩固你的查询。即使80%的用户只用到SQL中30%的功能,可是100%的用户都需要打破ORM的抽象才能够完成工作。
2. 不正确的抽象
如果你的项目确实不需要任何关系数据功能,那么ORM可以非常完美地为你工作。但是接下来你又遇到另外一个问题:你用错了了数据存储。关系存储的额外付出是非常高的;这就是为什么NoSQL数据要快得多的重要原因之一。然而,如果你的数据是关系型的,那么额外的付出就是值得的:你的数据库不仅存储数据,它还表达了你的数据,并且可以基于关系概念回答关于它的问题,这比你用过程代码能够做到的要快速得多。
但是,如果你的数据不是关系型的,那么你就是在不适当的场合使用SQL,这为你增加了巨大且不必要的负担;为了让问题更加严重,你在其上又增加了一重额外的抽象。
另一方面,如果你的数据是关系型的,那么你的对象映射最终会失败。SQL是关于关系代数的:SQL的输出不是对象,而是对于某个问题的解答。如果你的对象“是一个”X的实例,并且“拥有一些”Y,且每个Y“属于”Z,那么对象在内存中正确的表达形式是什么? 它应该是X的属性,或者全部包含在Y中,或者/并且全部包含在Z中?如果你只得到X的属性,那么何时你运行查询来获得Y呢?而且,你是想要其中一个还是全部?现实中,答案是依赖于条件的:这就是为什么我说SQL是对于问题的回答。对象在内存中的表达形式取决于你的意图,然而面向对象设计没有依赖于上下文的表达这样的功能。关系不是对象;对象也不是关系。
3. 多个查询导致失败
这自然的引出了ORM的另一个问题:效率低下。当你获取一个时,你需要哪些属性?ORM并不知道,所以它总是取得全部(或者它要求你告诉它,但是这又打破了抽象)。开始的时候这不成问题,但是当你一次取出上千条纪录的时候,如果你只需要3个属性却不得不取出全部30列,这时就产生了严重的性能问题。许多ORM层非常不善于推断join,从而不得不使用分离的查询来获取关联数据。如前所述,许多ORM层明确声明效率将会有所牺牲,其中一些提供了某些机制来调整引起问题的查询。我从过去的经历中发现的问题表明,很少有只需要调整单个“银弹”查询的情况:应用的数据库后端之所以死掉不是因为其中某一条查询,而是众多的查询引起的。ORM缺少上下文敏感的性质意味着它无法巩固查询,相反必须借助cache或其他机制来进行一定程度的补偿。
那么替代方案是什么?
希望到这里我已经澄清ORM在设计上的一些缺陷。但是要作为一个反模式,还需要存在替代的解决办法。事实上有两个取代方法:
1. 使用对象
如果你的数据是对象,那么停止使用关系数据库。编程界当前正在出现键-值对存储的浪潮,它允许你以闪电般的速度访问优雅的、自我包含的海量数据。没有法律规定编写Web应用的第一步必须安装MySQL。对于对象的每一种表达方式都使用关系数据库是一种过度使用,这也是近几年SQL的名称不太好的原因之一。事实上,问题在于偷懒的设计。
2. 在模型中使用SQL
编程中作任何事情都只有一种正确的方式,这是一种危险的说法。然而根据我的实践,在面向对象的代码中表达关系模型的最佳方法仍然是模型层:将你的所有数据表示封装在一个单独的区域是一个好注意。然而,记住模型层的工作簿在于表达对象,而在于回答问题。提供一个可以回答你的应用程序所包含的问题的API,尽量保持简洁高效。有时候,这些回答显得格格不入,以致于看上去是“错误的”,甚至对于资深的OO开发者也是如此。但是,你可以根据经验来更好地找到其中的普遍性,从而允许你将多个查询方法重构为单个。
类似的,有时候输出会是单个对象X,它很容易表达。 但是也有时候输出是聚合的对象表格,或者单个整数值。你要忍住将这些内容用过多抽象来包装的诱惑,用对象自身的术语来描述。首要的是,不要相信OO能够表达任何对象和所有对象。OO本身是一种优美和灵活的抽象,但关系数据在其范围之外,把它不能表达的东西伪装成对象是ORM的核心与真正的问题。
总结
ORM最初比编写基于SQL的模型代码更快,也更容易理解
它在任何项目早期都是足够有效的
不幸的是,这些优点在项目复杂性提升的时候就消失了:抽象被打破,开发者被迫使用并理解SQL
完全是非正式的声明,我认为ORM对抽象的破坏不是仅仅涉及20%的项目,而是几乎100%。
对象并不足以充分表达关系查询的结果。
关系查询映射到对象的不充分性导致了ORM后端应用的效率低下,这些问题普遍分布在应用的各处,并且除了完全放弃ORM之外,没有简单的解决办法。
不要对任何问题都使用关系存储与ORM,而是更加仔细地思考你的设计
如果你的数据天生就是对象,那么请使用对象存储("NoSQL")。它们要比关系数据库快得多。
如果你的数据天生就是关系型的,那么关系数据库带来的开销是值得的。
把你的关系查询封装在模型层中,设计你的API从而为应用提供数据访问支持;拒绝过分泛化的诱惑。
面向对象无法以有效的形式表达关系数据;这是面向对象设计的一个基本限制,ORM无法修复它。

什么是ORM的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于什么是ORM、什么是ORM的信息别忘了在本站进行查找哦。

orm说法正确的(什么是ORM)

本文编辑:admin

更多文章:


it培训是什么意思(IT培训都是培训啥呀)

it培训是什么意思(IT培训都是培训啥呀)

这篇文章给大家聊聊关于it培训是什么意思,以及IT培训都是培训啥呀对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录IT培训都是培训啥呀IT培训都有什么培训电脑培训分享什么是IT行业IT培训具体指什么,哪位高手解答一下it是什么

2025年7月8日 01:15

unknown hard error是什么意思(unknown hard error是什么意思)

unknown hard error是什么意思(unknown hard error是什么意思)

各位老铁们,大家好,今天由我来为大家分享unknown hard error是什么意思,以及unknown hard error是什么意思的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,

2025年9月1日 17:15

python怎么读取带锁的文件(python 读取文件)

python怎么读取带锁的文件(python 读取文件)

大家好,今天小编来为大家解答以下的问题,关于python怎么读取带锁的文件,python 读取文件这个很多人还不知道,现在让我们一起来看看吧!本文目录python 读取文件读取文件的代码pythonPython 拿来直接用的7个os读写文件

2026年4月22日 00:15

failed怎么读英语(失利英语怎么说)

failed怎么读英语(失利英语怎么说)

大家好,今天小编来为大家解答以下的问题,关于failed怎么读英语,失利英语怎么说这个很多人还不知道,现在让我们一起来看看吧!本文目录失利英语怎么说Failed 和test这两个单词该怎么读要有声音哦failed怎么读fail怎么读失利英语

2026年3月8日 17:45

c语言穷举法经典例题及答案(C语言穷举法求最小公倍数)

c语言穷举法经典例题及答案(C语言穷举法求最小公倍数)

本篇文章给大家谈谈c语言穷举法经典例题及答案,以及C语言穷举法求最小公倍数对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录C语言穷举法求最小

2025年9月6日 03:15

getconsolewindow(C语言 怎么使控制台窗口大小固定不变)

getconsolewindow(C语言 怎么使控制台窗口大小固定不变)

大家好,关于getconsolewindow很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于C语言 怎么使控制台窗口大小固定不变的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望

2025年6月6日 16:00

建站大师排名表2021(国内二次元手游2021年流水数据揭晓,最大赢家是谁)

建站大师排名表2021(国内二次元手游2021年流水数据揭晓,最大赢家是谁)

大家好,关于建站大师排名表2021很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于国内二次元手游2021年流水数据揭晓,最大赢家是谁的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,

2026年1月2日 02:15

刷机包zip下载(OPPO手机刷机包在哪里下载)

刷机包zip下载(OPPO手机刷机包在哪里下载)

这篇文章给大家聊聊关于刷机包zip下载,以及OPPO手机刷机包在哪里下载对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录OPPO手机刷机包在哪里下载下载的zip 刷机包要怎么用啊安卓下载了zip刷机包后怎么刷机下载的zip怎么

2026年3月17日 08:15

cssci期刊经济类读书报告(收购一篇《财政学》读书报告)

cssci期刊经济类读书报告(收购一篇《财政学》读书报告)

大家好,如果您还对cssci期刊经济类读书报告不太了解,没有关系,今天就由本站为大家分享cssci期刊经济类读书报告的知识,包括收购一篇《财政学》读书报告的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录收购一篇《财

2026年7月13日 04:15

html怎么在表格里加表格(如何在html单元格中插入表格并铺满单元格)

html怎么在表格里加表格(如何在html单元格中插入表格并铺满单元格)

其实html怎么在表格里加表格的问题并不复杂,但是又很多的朋友都不太了解如何在html单元格中插入表格并铺满单元格,因此呢,今天小编就来为大家分享html怎么在表格里加表格的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年5月14日 03:45

中国知网论文免费入口(中国知网免费入口)

中国知网论文免费入口(中国知网免费入口)

本篇文章给大家谈谈中国知网论文免费入口,以及中国知网免费入口对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录中国知网免费入口中国知网免费入口中国知网怎么免费下载论文中国知网怎么看免费论文怎么从中国知网免费下载论文如何进入中国知

2025年9月24日 21:45

编号非自动列表是什么意思(word中项目符号,编号,多级列表什么区别及各用在什么场合)

编号非自动列表是什么意思(word中项目符号,编号,多级列表什么区别及各用在什么场合)

其实编号非自动列表是什么意思的问题并不复杂,但是又很多的朋友都不太了解word中项目符号,编号,多级列表什么区别及各用在什么场合,因此呢,今天小编就来为大家分享编号非自动列表是什么意思的一些知识,希望可以帮助到大家,下面我们一起来看看这个问

2026年8月17日 05:15

数据库软件公司排名(专业软件公司排行榜)

数据库软件公司排名(专业软件公司排行榜)

大家好,数据库软件公司排名相信很多的网友都不是很明白,包括专业软件公司排行榜也是一样,不过没有关系,接下来就来为大家分享关于数据库软件公司排名和专业软件公司排行榜的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!本文目录专

2026年1月2日 01:15

辽宁省医用耗材代码库(国家贯标编码)

辽宁省医用耗材代码库(国家贯标编码)

其实辽宁省医用耗材代码库的问题并不复杂,但是又很多的朋友都不太了解国家贯标编码,因此呢,今天小编就来为大家分享辽宁省医用耗材代码库的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录国家贯标编码医用耗材挂网价怎么查国

2026年9月22日 22:15

oracle10客户端安装(Oracle Database 10g在windows上安装错误怎么解决)

oracle10客户端安装(Oracle Database 10g在windows上安装错误怎么解决)

本篇文章给大家谈谈oracle10客户端安装,以及Oracle Database 10g在windows上安装错误怎么解决对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题

2026年8月25日 13:00

print format(语句Print Format$(12345,“0000,00.00“)输出结果为_________ (A)12345.00 (B)12345 (C)012,345.00)

print format(语句Print Format$(12345,“0000,00.00“)输出结果为_________ (A)12345.00 (B)12345 (C)012,345.00)

这篇文章给大家聊聊关于print format,以及语句Print Format$(12345,“0000,00.00“)输出结果为_________ (A)12345.00 (B)12345 (C)012,345.00对应的知识点,希望对

2026年8月24日 09:45

数组公式和函数的区别(EXCEL的公式与函数的区别有哪些)

数组公式和函数的区别(EXCEL的公式与函数的区别有哪些)

其实数组公式和函数的区别的问题并不复杂,但是又很多的朋友都不太了解EXCEL的公式与函数的区别有哪些,因此呢,今天小编就来为大家分享数组公式和函数的区别的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录EXCEL的

2025年5月30日 08:45

进程和线程创建语句(作业(job),线程和进程有什么区别)

进程和线程创建语句(作业(job),线程和进程有什么区别)

大家好,进程和线程创建语句相信很多的网友都不是很明白,包括作业(job),线程和进程有什么区别也是一样,不过没有关系,接下来就来为大家分享关于进程和线程创建语句和作业(job),线程和进程有什么区别的一些知识点,大家可以关注收藏,免得下次来

2026年2月12日 01:30

concert复数(如果一个名词作定语好像 two concert tickets 这里的concert 要复数吗 名词做定语 那个做定语的名词有)

concert复数(如果一个名词作定语好像 two concert tickets 这里的concert 要复数吗 名词做定语 那个做定语的名词有)

大家好,如果您还对concert复数不太了解,没有关系,今天就由本站为大家分享concert复数的知识,包括如果一个名词作定语好像 two concert tickets 这里的concert 要复数吗 名词做定语 那个做定语的名词有的问题

2026年2月16日 01:30

nip和pluck的区别?百万英镑中,有这么一句,just like an englishman ,you see ,plu

nip和pluck的区别?百万英镑中,有这么一句,just like an englishman ,you see ,plu

本篇文章给大家谈谈pluck,以及nip和pluck的区别对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录nip和pluck的区别百万英镑中

2026年9月14日 14:15

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索