• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yodhcn
V2EX  ›  程序员

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

  •  2
     
  •   yodhcn ·
    yodhcn · Jul 15, 2022 · 22412 views
    This topic created in 1572 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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

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

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

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

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

    可以说是完美。
    skinny
    skinny
    Jul 16, 2022
    99
    @bthulu 对,删除操作也是,得先查询再删除,感觉特别傻逼,稍微复杂点还得手写 SQL 。还有动态添加 ORDERBY 之类也是难用。
    gongquanlin
    gongquanlin
    Jul 16, 2022❤️3
    100
    用了 laravel 的 orm 之后现在转 java ,觉着 java 的 orm 都和 shi 一样难用,还得复写 sql 。就算 mybatis plus 又如何,唉
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3295 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 265ms · UTC 04:24 · PVG 12:24 · LAX 20:24 · JFK 23:24
    ♥ Do have faith in what you're doing.