谁能通俗地讲解一下 ORM 框架具体是什么,以及相关的案例?

2017-01-13 10:12:30 +08:00
 anonymoustian

天天看大家说 ORM ORM 但是 ORM 具体是什么好像也没说明白,谁能通俗解释下呢

7170 次点击
所在节点    程序员
23 条回复
wshcdr
2017-01-13 10:14:21 +08:00
具体的案例就是比如 java 中的 Hibernate
LancerXin
2017-01-13 10:20:06 +08:00
可以很方便的将数据库里的数据读取出来放在内存里,
顺便将数据帮你转换成 bean 之类的,
顺便帮你管理一下数据库的事务之类的.
然后可以很方便的扩展查询条件的样子......
haozhang
2017-01-13 10:20:35 +08:00
将所有的数据持久化相关的工作全部转成对象操作,屏蔽底层数据库的细节。
echo1937
2017-01-13 10:24:48 +08:00
* OOP 的世界和 RDBMS 的鸿沟
*
* OOP 的世界中数据是对象
* RDBMS 中数据是行列二元表

* ORM(Object/Relation Mapping)
*
* 持久化类和 table 之间的映射关系
* 对持久化对象的操作自动转换成对关系数据库操作
* RDBMS 的每一行映射为每一个对象
* RDBMS 的每一列映射为对象的每一个属性

ORM 帮助你在对象和记录之间做映射,你就可以继续愉快地操作你熟悉的对象了。
q397064399
2017-01-13 10:32:42 +08:00
简而言之就是

将对象集合 映射成 数据库行列
将对对象的操作 映射成 SQL 语句

就这么简单,一般 ORM 框架自带多种自定义接口,
很多的常见需求的 SQL 都不用自己写,调接口就是了, JPA 规范里面 可以直接写就接口,然后让框架帮你
生成 SQL

优点:可以偷懒 省事 省时
缺点:复杂的查询就歇菜了, Hibernate 必备的技能就是 注入实体管理器,然后手动 SQL 组装对象,类似 Mybatis
zvving
2017-01-13 10:53:31 +08:00
首先你要知道 ORM 的缩写是什么;
其次你要知道怎么在开发语言( java , python )中写 SQL 操作数据库;
感觉写起来不大方便是吧,选个 ORM 框架试试。

话说回来,如果真的不知道 ORM 缩写是什么就来提问……有些不负责任呀。
syasuker
2017-01-13 10:58:18 +08:00
对象关系映射(英语: Object Relational Mapping ,简称 ORM ,或 O/RM ,或 O/R mapping ),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。

对于 Java 来说就是 Entity,将数据库中的字段对应到一个对象上
jswh
2017-01-13 11:00:45 +08:00
gino86
2017-01-13 13:43:19 +08:00
简单来说就是把一个对象中的属性值写入数据库对应列的中间件
wizardoz
2017-01-13 13:57:48 +08:00
ORM 就是将数据库的数据抽象成 编程语言中的对象.

就好有个学生表
没有 ORM 的时候是
select age,sex,degree,.... from student where name = "李刚"
查询出的结果可能是个字符串,你要去你面解析你要的内容.

有了 ORM 以后可能是这样:
obj_ligang = TStudent.objects.get(name="李刚")
然后就
print(obj_ligang.age, obj_ligang.sex, obj_ligang.degree)
AlisaDestiny
2017-01-13 14:02:50 +08:00
@jswh 这个站长真是有点意思。
ytmsdy
2017-01-13 14:22:36 +08:00
通俗一点说,就是相当于你跑了一个内存数据库。
dexterzzz
2017-01-13 14:26:50 +08:00
LINQ
WangXg
2017-01-13 17:13:41 +08:00
@ytmsdy 哈哈,挺形象
clino
2017-01-13 17:25:06 +08:00
python 里的例子就是 sqlalchemy
使用的例子如 uliweb 里的 uliorm 默认用 sqlalchemy 作为 orm 引擎: http://limodou.github.io/uliweb-doc/zh_CN/db/orm.html
darrenfang
2017-01-13 18:41:35 +08:00
@jswh 这个网站真好😂
lightening
2017-01-13 20:58:55 +08:00


UPDATE Customers
SET City='Hamburg'
WHERE id=1;

改成这样写:

customer = Customer.find_by(id: 1)
customer.city = 'Hamburg'
customer.save
izoabr
2017-01-13 22:49:15 +08:00
你不再需要自己去操作 SQL 了,而是在操作一个对象。
slysly759
2017-01-14 00:06:48 +08:00
跟着廖雪峰教程用 Python 手写一个,这样会理解更深入一些。我在博客上提到过用 orm 的一优势:比如避免 SQL 语句满天飞, web SQL 注入到处跑等等。
andreby
2017-01-14 21:34:14 +08:00
object relation mapping 啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/334287

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX