天天看大家说 ORM ORM 但是 ORM 具体是什么好像也没说明白,谁能通俗解释下呢
1
wshcdr 2017-01-13 10:14:21 +08:00
具体的案例就是比如 java 中的 Hibernate
|
2
LancerXin 2017-01-13 10:20:06 +08:00
可以很方便的将数据库里的数据读取出来放在内存里,
顺便将数据帮你转换成 bean 之类的, 顺便帮你管理一下数据库的事务之类的. 然后可以很方便的扩展查询条件的样子...... |
3
haozhang 2017-01-13 10:20:35 +08:00 via iPhone 1
将所有的数据持久化相关的工作全部转成对象操作,屏蔽底层数据库的细节。
|
4
echo1937 2017-01-13 10:24:48 +08:00 1
* OOP 的世界和 RDBMS 的鸿沟
* * OOP 的世界中数据是对象 * RDBMS 中数据是行列二元表 * ORM(Object/Relation Mapping) * * 持久化类和 table 之间的映射关系 * 对持久化对象的操作自动转换成对关系数据库操作 * RDBMS 的每一行映射为每一个对象 * RDBMS 的每一列映射为对象的每一个属性 ORM 帮助你在对象和记录之间做映射,你就可以继续愉快地操作你熟悉的对象了。 |
5
q397064399 2017-01-13 10:32:42 +08:00 1
简而言之就是
将对象集合 映射成 数据库行列 将对对象的操作 映射成 SQL 语句 就这么简单,一般 ORM 框架自带多种自定义接口, 很多的常见需求的 SQL 都不用自己写,调接口就是了, JPA 规范里面 可以直接写就接口,然后让框架帮你 生成 SQL 优点:可以偷懒 省事 省时 缺点:复杂的查询就歇菜了, Hibernate 必备的技能就是 注入实体管理器,然后手动 SQL 组装对象,类似 Mybatis |
6
zvving 2017-01-13 10:53:31 +08:00
首先你要知道 ORM 的缩写是什么;
其次你要知道怎么在开发语言( java , python )中写 SQL 操作数据库; 感觉写起来不大方便是吧,选个 ORM 框架试试。 话说回来,如果真的不知道 ORM 缩写是什么就来提问……有些不负责任呀。 |
7
syasuker 2017-01-13 10:58:18 +08:00
对象关系映射(英语: Object Relational Mapping ,简称 ORM ,或 O/RM ,或 O/R mapping ),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
对于 Java 来说就是 Entity,将数据库中的字段对应到一个对象上 |
8
jswh 2017-01-13 11:00:45 +08:00 1
|
9
gino86 2017-01-13 13:43:19 +08:00
简单来说就是把一个对象中的属性值写入数据库对应列的中间件
|
10
wizardoz 2017-01-13 13:57:48 +08:00 1
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) |
11
AlisaDestiny 2017-01-13 14:02:50 +08:00
@jswh 这个站长真是有点意思。
|
12
ytmsdy 2017-01-13 14:22:36 +08:00
通俗一点说,就是相当于你跑了一个内存数据库。
|
13
dexterzzz 2017-01-13 14:26:50 +08:00
LINQ
|
15
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 |
16
darrenfang 2017-01-13 18:41:35 +08:00 via iPhone
@jswh 这个网站真好😂
|
17
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 |
18
izoabr 2017-01-13 22:49:15 +08:00
你不再需要自己去操作 SQL 了,而是在操作一个对象。
|
19
slysly759 2017-01-14 00:06:48 +08:00 via Android 1
跟着廖雪峰教程用 Python 手写一个,这样会理解更深入一些。我在博客上提到过用 orm 的一优势:比如避免 SQL 语句满天飞, web SQL 注入到处跑等等。
|
20
andreby 2017-01-14 21:34:14 +08:00
object relation mapping 啊
|
21
abcbuzhiming 2017-01-14 22:03:55 +08:00
想把关系数据库的模型映射为对象模型,别说这招在很多场合是适用的,因为实际上我们在大多数时候不需要强关系模型,但是,复杂关系查询就完蛋了
|
22
anonymoustian OP @abcbuzhiming 请问什么叫做强关系模型呢?
|
23
abcbuzhiming 2017-01-16 17:23:19 +08:00
@anonymoustian 关系数据库最早的需求来源就是金融业,这个领域的数据的一致性和实时性要求非常高,各种约束,这就是关系数据库的早期场景,可以看做是强关系模型,但是后来到了互联网时代,没有这么严格的数据校验需求,或者说,互联网时代的数据没有这么严格的需求,倒是很多用关系数据库的互联网项目把外键都去掉,甚至数据一致性和唯一性放在程序做校验,数据库单纯作为数据仓库使用
|