V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
twogoods
V2EX  ›  数据库

数据库操作你是喜欢 ORM 还是手写 SQL

  •  
  •   twogoods · Sep 28, 2017 · 10084 views
    This topic created in 3133 days ago, the information mentioned may be changed or developed.
    说说为什么?还有可以告诉我哪个语言下哪个库超好用吗?想多了解了解,尝试造个轮子,逃...
    Supplement 1  ·  Sep 28, 2017
    orm 最主要的功能是关系数据映射称为程序中的对象,那类似 hibernate 这种多表,各种关联关系都可以进行映射的功能会用的多吗?动态 sql 需求也是非常常见的,你们怎么处理的,哪个库有比较好的支持?
    111 replies    2017-11-26 10:29:18 +08:00
    1  2  
    msg7086
        101
    msg7086  
       Sep 29, 2017   ❤️ 1
    @timwei 首先,where 方法返回 Relation,而 Relation 只有在访问其内容的时候才会产生 SQL 查询。
    所以前面那个方法在最坏情况下也只会产生 2 条 SQL 查询,一条来自 empty?方法,会产生一个 COUNT(*) 语句,另一条来自 first 方法,会产生一个 LIMIT 1 语句。调用 where 方法是不会产生查询的。这是 Rails 3 里 Active Record 加入的惰性查询求值。

    换句话说,如果一个 ORM 语句从来没有被访问到(比如 a = O.where.where.not.order 但是没有访问 a 的值),那就连一条 SQL 查询都不会产生。只有当你访问( empty? each map first select )的时候才会产生 SQL 查询。

    在 pry/irb 下直接贴代码的时候,irb 会自动把变量的内容打印出来,打印行为就是对变量的访问,因此会产生额外的查询。封装在方法里的 ORM 语句,只要不访问结果,便不会有查询。
    timwei
        102
    timwei  
       Sep 29, 2017 via Android
    @msg7086

    受教了
    syasuker
        103
    syasuker  
       Sep 29, 2017
    读写分开吧;读取的时候使用 sql 手写;写入的时候使用 ORM
    aminic
        104
    aminic  
       Sep 30, 2017 via Android
    看情况
    yidinghe
        105
    yidinghe  
       Sep 30, 2017 via Android
    orm 要学习的东西太多,结果并没有降低开发门槛。
    StevenTong
        106
    StevenTong  
       Sep 30, 2017
    微服务架构了 现在主要用 spring data jpa
    whatsmyip
        107
    whatsmyip  
       Sep 30, 2017
    [SQLBuilder]( https://github.com/newnius/util4p/blob/master/SQLBuilder.class.php)

    自己造的小轮子,用 ORM 处于两个原因:

    - 数据库间迁移方便
    - 代码看起来舒服一点


    ```
    $offset = $rule->getInt('offset', 0);
    $limit = $rule->getInt('limit', -1);
    $selected_rows = array('username', 'email', 'email_verified', 'role', 'reg_time', 'reg_ip');
    $where_arr = array();
    $builder = new SQLBuilder();
    $builder->select('qa_user', $selected_rows);
    $builder->where($where_arr);
    $builder->limit($offset, $limit);
    $sql = $builder->build();
    ```

    不过手写也很喜欢
    onlyice
        108
    onlyice  
       Sep 30, 2017
    不会手写,喜欢 ORM,感觉可读可维护

    而且很多 ORM 框架都提供了一些嵌入手写 SQL 的能力,这种灵活性可以 cover 住很多需求
    moka20477
        109
    moka20477  
       Sep 30, 2017
    如果项目难度不大 ,而且开发人员水平参差不齐的话 ,就 ORM 吧,出现一条 SQL 搞挂数据库的概率小很多
    要是有数据量很大,而且 SQL 比较复杂的话,还是手写吧,ORM 性能太差
    RorschachZZZ
        110
    RorschachZZZ  
       Sep 30, 2017
    查询:手写。更新和插入:ORM。
    mingyun
        111
    mingyun  
       Nov 26, 2017
    比如 laravel 的 orm 就很方便
    1  2  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1507 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 16:54 · PVG 00:54 · LAX 09:54 · JFK 12:54
    ♥ Do have faith in what you're doing.