V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yodhcn
V2EX  ›  程序员

不限编程语言,你认为哪个 ORM 最好用?

  •  2
     
  •   yodhcn ·
    yodhcn · 84 天前 · 10494 次点击
    这是一个创建于 84 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用过一段 nodejs 的 prisma,CURD 确实很爽,但麻烦一点的查询就只能手写 SQL 了,因为 prisma 这个框架不提供底层的 query builder ,最后还是换回了 knex 这个 query builder 一把梭。

    我想了解一下其它编程语言都有哪些好用的 ORM ,哪些 feature 让你选择这个 ORM ?

    听说过 laravel 的 Eloquent 很好用,但不知道 php 现在 Type Hints 发展的怎么样,有没有像 typescript 一样被广泛应用,因为现在大部分常用的 npm 包都有官方或第三方 typescript 类型注释支持。

    第 1 条附言  ·  84 天前
    看到诸位都在复读 Rails ,Google 了一下,这是一个曾经很流行的框架,后面的很多 web 框架都有借鉴它,但在我印象里,至少在国内 ruby 并不流行?
    而且用过了 typescript 后,我现在更偏好 强类型 /有类型注释 的动态语言。
    144 条回复    2022-07-22 09:33:38 +08:00
    1  2  
    VincentWang
        1
    VincentWang  
       84 天前   ❤️ 4
    JPA / Hibernate
    jiulang
        2
    jiulang  
       84 天前   ❤️ 1
    当然 efcore 最好用
    masterclock
        3
    masterclock  
       84 天前   ❤️ 2
    scala doobie/quill
    hervey0424
        4
    hervey0424  
       84 天前   ❤️ 1
    efcore
    terranboy
        5
    terranboy  
       84 天前   ❤️ 1
    难道你要因为哪个 orm 好用再去选择语言? 熟悉哪个语言就用哪个语言的 orm 我觉得现代的 orm 都差不多
    lululau
        6
    lululau  
       84 天前   ❤️ 21
    “不是我针对谁,我是说,在座的各位都是垃圾”

    —— Rails Active Record
    NPC666
        7
    NPC666  
       84 天前 via Android   ❤️ 1
    FreeSQL
    wangkun025
        8
    wangkun025  
       84 天前   ❤️ 1
    难道不是祖师爷 Rails 吗?
    xiaket
        9
    xiaket  
       84 天前
    Django
    yodhcn
        10
    yodhcn  
    OP
       84 天前
    @terranboy #5 我觉得现代的编程语言也差不多... 而且我也没有对哪一编程语言特别熟悉,现在还是面向 stackoverflow 编程
    pepesii
        11
    pepesii  
       84 天前
    rails 呀
    ifdef
        12
    ifdef  
       84 天前
    typeorm 支持 query builder
    qichunren
        13
    qichunren  
       84 天前
    “不是我针对谁,我是说,在座的各位都是垃圾”

    —— Rails Active Record
    deepall
        14
    deepall  
       84 天前
    “不是我针对谁,我是说,在座的各位都是垃圾”

    —— Rails Active Record
    gam2046
        15
    gam2046  
       84 天前
    我觉得 ORM 能提供数据库类型到编程语言类型的转换功能就足够了。手写 SQL 无论如何都跑不掉,既然跑不掉都自己也没关系。
    fo2w
        16
    fo2w  
       84 天前
    “不是我针对谁,我是说,在座的各位都是垃圾”

    —— Rails Active Record
    yodhcn
        17
    yodhcn  
    OP
       84 天前
    看到诸位都在复读 Rails ,Google 了一下,这是一个曾经很流行的框架,后面的很多 web 框架都有借鉴它,但在我印象里,至少在国内 ruby 并不流行?
    而且用过了 typescript 后,我现在更偏好 强类型 /有类型注释 的动态语言
    FightPig
        18
    FightPig  
       84 天前
    Rails 的 ActiveRecord
    haolongsun
        19
    haolongsun  
       84 天前
    Django
    masterclock
        20
    masterclock  
       84 天前
    ORM 怎么着也得强类型、静态类型吧 [doge]
    liuhan907
        21
    liuhan907  
       84 天前
    efcore ,没别的。
    mizuhashi
        22
    mizuhashi  
       84 天前 via iPhone
    rails 的关键是 scope 是一种代数,可以自由组合,一般的 query builder 没这功能。另外 rails 的路由是一个有限自动机,而不是别的那样一个正则列表遍历。
    bthulu
        23
    bthulu  
       84 天前
    efcore 好用个屁, 批量更新都没出来, 还要 7.0 版才出
    bthulu
        24
    bthulu  
       84 天前
    就是那种最简单的, update xxx set xx=xx where xx=xx, efcore 都搞不定, 要先通过 where xx=xx 全部查出来, 再循环修改完成后, 再 saveChanges.
    详见 https://github.com/dotnet/efcore/issues/795
    panlatent
        25
    panlatent  
       84 天前
    如果需要用到框架,那有一点需要考虑:ORM 跟框架的适配度,这点一般框架内置的 ORM 都比较优秀。需要考虑的是否需要支持 SQL Builder 。还有就是怎样使用 ORM , 是只用来跟数据库打交道还是贯穿整个应用,这些对 ORM 的要求肯定不一样。

    一般都是选定语言再去比较 ORM , 全语言的话,好用程度应该是动态类型语言 > 静态类型语言, 脚本语言 > 编译语言,建模能力强,语法糖多的 > 语法简单、设施少的语言。
    themostlazyman
        26
    themostlazyman  
       84 天前
    MyBatis-Plus
    Cyanhall
        27
    Cyanhall  
       84 天前   ❤️ 2
    Python 我选 SQLAlchemy

    Golang 我选 Ent
    konnnnn
        28
    konnnnn  
       84 天前
    ecto
    hingbong
        29
    hingbong  
       84 天前
    jvm 的 JOOQ 吧
    ByteCat
        30
    ByteCat  
       84 天前
    Hibernate
    wanguorui123
        31
    wanguorui123  
       84 天前
    NHibernate
    pengtdyd
        32
    pengtdyd  
       84 天前
    prisma
    nine
        33
    nine  
       84 天前
    ORM 肯定是 Rails 了,其他语言根本抄不来的,原因就是 Ruby 的语言特性。
    Rails 后端开发体验,对任何语言框架都是秒杀。(不含 js )

    Rails 仿体最好的是 Elixir 的 Phoniex ,性能出众,然而语言太小众了,生产场合基本不会选择他。
    XCFOX
        34
    XCFOX  
       84 天前   ❤️ 2
    https://mikro-orm.io/
    TypeScript 的 Mikro Orm 真的很不错
    ✅ 类型安全
    ✅ 隐式事务
    ✅ 使用 TypeScript 的 class 和装饰器定义 POJO
    ✅ 超强的 Query Builder (内置 knex )
    chrisia
        35
    chrisia  
       84 天前
    ActiveRecord
    XCFOX
        36
    XCFOX  
       84 天前
    prisma 的问题是它使用自己的一套 DDL(Prisma schema) 去定义 POJO ,而它的 DDL 又不如 TypeScript 好用:无法继承、无法 export ,无法和 class-validator 等库共用。
    wellerman
        37
    wellerman  
       84 天前
    laravel Eloquent + migration 又快又好
    james2013
        38
    james2013  
       84 天前
    MyBatis-Plus
    iwdmb
        39
    iwdmb  
       84 天前
    Rails ActiveRecord
    时代的眼泪
    wxlwsy
        40
    wxlwsy  
       84 天前
    我目前用的是 mybatis,用法是这样的:
    1 数据库的手动写.
    2 用 maven 插件 生成模板类 ,不关心内生成的 java 是啥牛鬼蛇神,反正数据库咋样代码都是有的,然后打成 jar
    3 项目依赖刚才生产 jar, 然后写个 Dao 就用 mybatis dynamic SQL. 可以不用手写 sql 了.......
    4 程序只操作 DAO.不关心后面的事情.

    实际上最简单的就是手写 sql, 但是手写 sql 最大的问题是数据库变了,编译器检查不了问题,因为那是 String. 完全用 java 的话,重新打包,字段变量马上报警(如果数据库新增字段除外).
    zzf
        41
    zzf  
       84 天前
    ecto
    jininij
        42
    jininij  
       84 天前 via iPhone   ❤️ 3
    yii2 的 ActiveRecord ,虽然不写 PHP 已经很多年,但还是很怀念这个 ORM 。我用过最舒服的 orm 没有之一。外加我自己实现的增强 gii ,成为我的舒适区了。后来写 js ,写 python ,写 java ,用什么 ORM 都觉得浑身不舒服。
    87B3F508
        43
    87B3F508  
       84 天前
    Jooq 好用
    Baloneo
        44
    Baloneo  
       84 天前
    Peewee
    IMengXin
        45
    IMengXin  
       84 天前
    目前在用的:SqlSugar
    zxCoder
        46
    zxCoder  
       84 天前
    不都一样吗,没啥大区别
    StarkWhite
        47
    StarkWhite  
       84 天前
    graphql 了解一下。都 9102 年了,大家有没有用上 Facebook 出的 GraphQL ?
    https://v2ex.com/t/589138
    flowerains
        48
    flowerains  
       84 天前
    @jininij 俺也用过 yii ,确实挺怀念 activeRecord 的,可能是其他的 thinkphp 的 orm 太垃了
    StarkWhite
        49
    StarkWhite  
       84 天前
    @bthulu 这也太拉了吧😂
    lancelock
        50
    lancelock  
       84 天前
    freesql
    haolongsun
        51
    haolongsun  
       84 天前
    另外也安利一下 rust 下的 sea-orm.
    Lattez
        52
    Lattez  
       84 天前
    sqlalchemy
    ll5270
        53
    ll5270  
       84 天前
    django
    shyling
        54
    shyling  
       84 天前
    activerecord 啊。。
    learningman
        55
    learningman  
       84 天前 via Android
    @StarkWhite graphql 是传输协议,又不是 orm
    LeegoYih
        56
    LeegoYih  
       84 天前
    Java:JPA (实名抵制 MyBatis 和三流插件 MyBatis-Plus ,本质上 ORM 都不算)
    Ruby:Rails (众多框架“借鉴”的对象)
    Python:SQLAlchemy
    Go:没一个好用的,受限于语言本身
    moell
        57
    moell  
       84 天前
    Eloquent ORM
    lp7631010
        58
    lp7631010  
       84 天前
    基本上 php laravel 用起来都不怎么需要去拼写 sql, orm 起码能完成日常 95%以上操作,动态语言搞 orm 是天生的优势
    233373
        59
    233373  
       84 天前
    Django
    qfdk
        60
    qfdk  
       84 天前 via iPhone
    objection.js
    min
        61
    min  
       84 天前
    ef
    frodez
        62
    frodez  
       84 天前
    rust 的 sqlx ,不过不是 orm 级别的库。
    angelface
        63
    angelface  
       84 天前
    要说写的爽, 那 Rails 的 AR 真的是无人能出其右。
    干净利索,非常自然
    kingjpa
        64
    kingjpa  
       84 天前
    静态语言的 orm 就不要拿来说了,和动态语言比 就是幼稚园和大学生的差距。
    反过来比性能,角色互换
    evlos
        65
    evlos  
       84 天前 via iPhone
    ActiveRecord
    lovepplforever
        66
    lovepplforever  
       84 天前
    Rails 的 ActiveRecord 是最屌的
    WispZhan
        67
    WispZhan  
       84 天前 via Android
    没人提 groovy 的 grails 啊,不过没错看名字就知道是抄的 rails
    wuhaoworld
        68
    wuhaoworld  
       84 天前
    必须得是 Laravel 下的 Eloquent ORM
    zorui
        69
    zorui  
       84 天前
    c# LINQ
    zoharSoul
        70
    zoharSoul  
       84 天前
    mybatis, 喜欢这种写 sql 的
    ychost
        71
    ychost  
       84 天前
    EntityFramework 配合 C# 的 Linq 是最好用的,Linq YYDS
    lkk
        72
    lkk  
       84 天前
    Ruby 在中国不流行大概是因为它名字取的不好,弱逼。
    youngce
        73
    youngce  
       84 天前
    django
    Saxton
        74
    Saxton  
       84 天前
    @LeegoYih 如果复杂一点的需求 JPA 真的很难吃开的,最终代码充实着各种拼接。
    varzy
        75
    varzy  
       84 天前
    Laravel 的 Eloquent ORM 。说实话我几乎不会写 sql ,只有 Laravel 的 Eloquent ORM 能做到让我一行 sql 都不写把项目做出来。。。。
    CookCoder
        76
    CookCoder  
       84 天前
    PHP Laravel ORM
    rajab
        77
    rajab  
       84 天前 via Android
    ebean
    ostholz
        78
    ostholz  
       84 天前
    @lululau
    sequel 表示不服
    zhouyg
        79
    zhouyg  
       84 天前
    好奇 OP 说的“麻烦一点的查询”是怎么样的,基于 prisma 关系的查找为啥搞不定呢
    dqzcwxb
        80
    dqzcwxb  
       84 天前   ❤️ 1
    tkmapper,兼容原生 mybatis 且支持多种数据库
    你爱手写 sql 就手写,你爱用 jpa 语法就 jpa 语法一切自由
    Features
        81
    Features  
       84 天前
    Eloquent ORM 懒人福音
    xgdgsc
        82
    xgdgsc  
       84 天前 via Android
    对 Julia 感兴趣的话可以看下 PostgresORM.jl 和 Searchlight.jl ,目前可能不是最完备的,但对你参与开发可能最友好
    Rache1
        83
    Rache1  
       84 天前
    没体验过 ROR 的,但是口碑一直挺不错的样子,用了其他语言的蹩脚 ORM 后,还是觉得 Laravel Eloquent 好用

    gotounix
        84
    gotounix  
       84 天前   ❤️ 1
    SQLAlchemy ,MyBatis 这种半自动的感觉不伦不类。
    jarontai
        85
    jarontai  
       84 天前 via iPhone
    巧了,最近我们也开始用 TS 的 orm ,选的是 MikroOrm ,支持 mongo 和 mysql ,支持 query builder ,底层也应该有用 knex ,还没有深度使用但感觉良好
    gowk
        86
    gowk  
       84 天前
    我站 Entity Framework
    6167
        87
    6167  
       84 天前
    sqlalchemy
    815979670
        88
    815979670  
       84 天前
    我投 Yii2 一票,本身会的语言不多 PHP 然后会写一点 GO ,Go 的话 有接触 GORM ,PHP 的话 主流的框架基本都用过,但感觉最舒服只有 Yii2 的 ORM
    afewok
        89
    afewok  
       84 天前
    手写 SQL 才是最简单,最好用的
    runliuv
        90
    runliuv  
       84 天前   ❤️ 1
    “不是我针对谁,我是说,在座的各位都是垃圾”
    -- C#.NET Entity Framework.
    yedanten
        91
    yedanten  
       84 天前 via Android
    PHP Laravel Eloquent 是真的好用,完完全全,0 心智负担
    lanlanye
        92
    lanlanye  
       84 天前
    如果想要代码代替手写 SQL 的那种 Builder 的话,SQLAlchemy 不错,基本能写 SQL 的都可以写 Python 实现,虽然写起来跟直接写 SQL 也没啥区别。
    如果是 Active Record 那种简单需求的话,毫无疑问是 Rails 的体验秒杀其他工具。
    Leviathann
        93
    Leviathann  
       84 天前
    快 100 楼了没有一行代码展示是怎么好用的
    maocat
        94
    maocat  
       84 天前 via iPhone
    Python 的 mongoengine ,真的好用
    lazywen
        95
    lazywen  
       84 天前 via Android
    Rails ,Django 都很顺手,还有 jetbrains 出的 exposed 也挺好用的,另外 jpa 的状态管理巨坑,依赖数据库强一致性状态的程序慎用,crud 无所谓
    StarkWhite
        96
    StarkWhite  
       84 天前
    @Leviathann 坐等代码展示哈哈
    StarkWhite
        97
    StarkWhite  
       84 天前
    我记得阿里出了个 orm ,好像叫 fluentmybatis
    mind3x
        98
    mind3x  
       84 天前
    居然没人提 Rust 的 Diesel: https://diesel.rs/
    * 强类型安全
    * 代码生成
    * 几乎零额外开销

    可以说是完美。
    skinny
        99
    skinny  
       83 天前
    @bthulu 对,删除操作也是,得先查询再删除,感觉特别傻逼,稍微复杂点还得手写 SQL 。还有动态添加 ORDERBY 之类也是难用。
    gongquanlin
        100
    gongquanlin  
       83 天前   ❤️ 3
    用了 laravel 的 orm 之后现在转 java ,觉着 java 的 orm 都和 shi 一样难用,还得复写 sql 。就算 mybatis plus 又如何,唉
    1  2  
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   862 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 22:08 · PVG 06:08 · LAX 15:08 · JFK 18:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.