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

2022-07-15 13:49:57 +08:00
 yodhcn

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

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

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

15709 次点击
所在节点    程序员
144 条回复
liuhan907
2022-07-15 14:43:24 +08:00
efcore ,没别的。
mizuhashi
2022-07-15 14:44:05 +08:00
rails 的关键是 scope 是一种代数,可以自由组合,一般的 query builder 没这功能。另外 rails 的路由是一个有限自动机,而不是别的那样一个正则列表遍历。
bthulu
2022-07-15 14:45:56 +08:00
efcore 好用个屁, 批量更新都没出来, 还要 7.0 版才出
bthulu
2022-07-15 14:48:02 +08:00
就是那种最简单的, update xxx set xx=xx where xx=xx, efcore 都搞不定, 要先通过 where xx=xx 全部查出来, 再循环修改完成后, 再 saveChanges.
详见 https://github.com/dotnet/efcore/issues/795
panlatent
2022-07-15 14:49:33 +08:00
如果需要用到框架,那有一点需要考虑:ORM 跟框架的适配度,这点一般框架内置的 ORM 都比较优秀。需要考虑的是否需要支持 SQL Builder 。还有就是怎样使用 ORM , 是只用来跟数据库打交道还是贯穿整个应用,这些对 ORM 的要求肯定不一样。

一般都是选定语言再去比较 ORM , 全语言的话,好用程度应该是动态类型语言 > 静态类型语言, 脚本语言 > 编译语言,建模能力强,语法糖多的 > 语法简单、设施少的语言。
themostlazyman
2022-07-15 14:56:20 +08:00
MyBatis-Plus
Cyanhall
2022-07-15 14:57:48 +08:00
Python 我选 SQLAlchemy

Golang 我选 Ent
konnnnn
2022-07-15 14:58:07 +08:00
ecto
hingbong
2022-07-15 15:01:19 +08:00
jvm 的 JOOQ 吧
ByteCat
2022-07-15 15:01:37 +08:00
Hibernate
wanguorui123
2022-07-15 15:02:41 +08:00
NHibernate
pengtdyd
2022-07-15 15:04:24 +08:00
prisma
nine
2022-07-15 15:08:37 +08:00
ORM 肯定是 Rails 了,其他语言根本抄不来的,原因就是 Ruby 的语言特性。
Rails 后端开发体验,对任何语言框架都是秒杀。(不含 js )

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

实际上最简单的就是手写 sql, 但是手写 sql 最大的问题是数据库变了,编译器检查不了问题,因为那是 String. 完全用 java 的话,重新打包,字段变量马上报警(如果数据库新增字段除外).

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/866413

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX