谁能通俗地讲解一下 ORM 框架具体是什么,以及相关的案例? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
anonymoustian

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

  •  
  •   anonymoustian 2017 年 1 月 13 日 7628 次点击
    这是一个创建于 3389 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    23 条回复    2017-01-16 17:23:19 +08:00
    wshcdr
        1
    wshcdr  
       2017 年 1 月 13 日
    具体的案例就是比如 java 中的 Hibernate
    LancerXin
        2
    LancerXin  
       2017 年 1 月 13 日
    可以很方便的将数据库里的数据读取出来放在内存里,
    顺便将数据帮你转换成 bean 之类的,
    顺便帮你管理一下数据库的事务之类的.
    然后可以很方便的扩展查询条件的样子......
    haozhang
        3
    haozhang  
       2017 年 1 月 13 日 via iPhone   1
    将所有的数据持久化相关的工作全部转成对象操作,屏蔽底层数据库的细节。
    echo1937
        4
    echo1937  
       2017 年 1 月 13 日   1
    * OOP 的世界和 RDBMS 的鸿沟
    *
    * OOP 的世界中数据是对象
    * RDBMS 中数据是行列二元表

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

    ORM 帮助你在对象和记录之间做映射,你就可以继续愉快地操作你熟悉的对象了。
    q397064399
        5
    q397064399  
       2017 年 1 月 13 日   1
    简而言之就是

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

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

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

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

    对于 Java 来说就是 Entity,将数据库中的字段对应到一个对象上
    jswh
        8
    jswh  
       2017 年 1 月 13 日   1
    gino86
        9
    gino86  
       2017 年 1 月 13 日
    简单来说就是把一个对象中的属性值写入数据库对应列的中间件
    wizardoz
        10
    wizardoz  
       2017 年 1 月 13 日   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)
    AlisaDestiny
        11
    AlisaDestiny  
       2017 年 1 月 13 日
    @jswh 这个站长真是有点意思。
    ytmsdy
        12
    ytmsdy  
       2017 年 1 月 13 日
    通俗一点说,就是相当于你跑了一个内存数据库。
    dexterzzz
        13
    dexterzzz  
       2017 年 1 月 13 日
    LINQ
    WangXg
        14
    WangXg  
       2017 年 1 月 13 日
    @ytmsdy 哈哈,挺形象
    clino
        15
    clino  
       2017 年 1 月 13 日
    python 里的例子就是 sqlalchemy
    使用的例子如 uliweb 里的 uliorm 默认用 sqlalchemy 作为 orm 引擎: http://limodou.github.io/uliweb-doc/zh_CN/db/orm.html
    darrenfang
        16
    darrenfang  
       2017 年 1 月 13 日 via iPhone
    @jswh 这个网站真好
    lightening
        17
    lightening  
       2017 年 1 月 13 日


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

    改成这样写:

    customer = Customer.find_by(id: 1)
    customer.city = 'Hamburg'
    customer.save
    izoabr
        18
    izoabr  
       2017 年 1 月 13 日
    你不再需要自己去操作 SQL 了,而是在操作一个对象。
    slysly759
        19
    slysly759  
       2017 年 1 月 14 日 via Android   1
    跟着廖雪峰教程用 Python 手写一个,这样会理解更深入一些。我在博客上提到过用 orm 的一优势:比如避免 SQL 语句满天飞, web SQL 注入到处跑等等。
    andreby
        20
    andreby  
       2017 年 1 月 14 日
    object relation mapping 啊
    abcbuzhiming
        21
    abcbuzhiming  
       2017 年 1 月 14 日
    想把关系数据库的模型映射为对象模型,别说这招在很多场合是适用的,因为实际上我们在大多数时候不需要强关系模型,但是,复杂关系查询就完蛋了
    anonymoustian
        22
    anonymoustian  
    OP
       2017 年 1 月 15 日
    @abcbuzhiming 请问什么叫做强关系模型呢?
    abcbuzhiming
        23
    abcbuzhiming  
       2017 年 1 月 16 日
    @anonymoustian 关系数据库最早的需求来源就是金融业,这个领域的数据的一致性和实时性要求非常高,各种约束,这就是关系数据库的早期场景,可以看做是强关系模型,但是后来到了互联网时代,没有这么严格的数据校验需求,或者说,互联网时代的数据没有这么严格的需求,倒是很多用关系数据库的互联网项目把外键都去掉,甚至数据一致性和唯一性放在程序做校验,数据库单纯作为数据仓库使用
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2180 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 75ms UTC 16:11 PVG 00:11 LAX 09:11 JFK 12:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86