![]() |
1
niubee1 1 天前
Orm 有好用的吗?
|
![]() |
3
ruchee 1 天前 ![]() 那必须得是祖师爷 Rails
|
![]() |
4
ratazzi 1 天前 via iPhone ![]() 那必须是 Rails
|
5
liuhaitaoSB 1 天前
rails 这么叼吗
|
7
0xxb 1 天前 ![]() Laravel 和 Eloquent ORM
|
![]() |
8
mitoop 1 天前 ![]() 这必须是 Laravel 啊
|
![]() |
9
cmdOptionKana 1 天前 ![]() 如果比 Rails 更好用,那大概率也是在 Rails 的基础上改进的。
|
![]() |
10
1zh3n 1 天前 via Android
Prisma ,用起来很自然,心智负担很小。
事务直接放数组里面: const [posts, totalPosts] = await prisma.$transaction([ prisma.post.findMany({ where: { title: { contains: 'prisma' } } }), prisma.post.count(), ]) |
![]() |
11
ratazzi 1 天前
夸 Laravel 还行,但是夸 Prisma 的真是没预料到,这辈子都不想再用:
根本不能算模型定义的模型 migration 根本没法用 简单的保存是有了 id 还用要 id 执行一遍查询,然后再更新,然后在获取更新后的结果 |
12
uxstone 1 天前
Spring Boot + Mybatis Plus
|
![]() |
13
XCFOX 1 天前 ![]() 我给 TypeScript ORM 排个名:
Drizzle > Kysely > Orchid ORM >> MikroORM > Prisma > TypeORM Drizzle 、Kysely 已经是版本答案了:没有太花哨的功能,只需要写 SQL ,ORM | SQL Builder 将给你类型安全的查询结果。 Kysely 只是一个 SQL Builder ,类型安全方面做得也是最好的; Drizzle 在 SQL Builder 的基础上加了表结构定义,能满足表迁移的许多工作,因此把 Drizzle 排在 Kysely 前面。 Orchid ORM 非常小众,除了 SQL Builder 和表结构定义还加了许多 EntityManager | Repository 的糖,但主要还是以 SQL Builder 为主。 再之后就是传统的围绕 Entity 的 ORM 。这一类 ORM 都内置了丰富的 EntityManager | Repository 的功能,SQL Builder 功能只是作为兜底方案。这类 ORM 的通病是 Repository API 无法满足所有的 SQL 写法,到头来还是得写 SQL 。 这其中功能做的最全的是 MikroORM ,隐式事务、实体事件监听、过滤器、Migrations 、Seeding ,也内置了 Knex 作为 SQL Builder 。 Prisma 的主要槽点是:使用自己发明的 Prisma Schema 用于定义表结构、使用自己发明的 Repository API 用于读写数据库,后果是增加了学习成本,隐藏了许多细节碰到问题了不太容易排查; TypeORM 毫无疑问垫底,连最基础的空安全和类型安全都不好。隔壁 MikroORM 6.5 已经在用 `defineEntity` 尝试摆脱了对 Decorators 的依赖。TypeORM 前两年都没怎么维护,今年有了新的团队接手才开始处理积攒了几年的 issue 。 |
![]() |
14
zpvip 21 小时 11 分钟前 ![]() 很多人根本没真正用过 Rails ,这已经是一种技术上的遗憾。你们天天吹前后端分离、Microservices ,殊不知那不过是自嗨,搞得整个项目复杂化、性能折腾、调试痛苦,用户体验倒退, 成天看着菊花转啊转。Rails 告诉你:什么是高效、简洁和稳健。
Rails 的开发效率是任何 JS 、C#、Java 、Python 框架都望尘莫及的。一个标准的 CRUD 网站,加上各种 Gems, 几小时就能上线一个带 RBAC 带后台的管理系统,ActiveRecord ORM 简直是魔法,数据库操作简单得让你怀疑人生。而你们那些前后端分离、手动调接口的项目,动不动就死在同步和状态管理上。 现在有了 AI ,99% 的网站根本不需要前后端分离。以前是前端的开发者可以自己定制后端, 以前是后端的开发者, 可以让 AI 帮你写前端。如果用 Hotwire 就可以告别 React 、Vue 的冗余和复杂性,如果用 Hotwire Native 适配一下,就可以用极少的代价上线 iOS + Android. 真正做过 Rails 的人,从来不想回到 JS/Java/C# 的折磨里。Rails 不只是开发工具,它是高效网站开发的标准,其他框架,只能是“绕路”的选择. |
15
1wlinesperday 17 小时 29 分钟前
为什么没人喜欢 Golang 的 Ent ?
|
![]() |
16
huamu 17 小时 27 分钟前
C#中 Dapper
|
![]() |
17
isSamle 17 小时 27 分钟前 ![]() Django
|
![]() |
18
masterclock 17 小时 20 分钟前 ![]() scala 的一些 ORM ,比如 doobie
得益于 scala 语言的特性,大部分其他语言的 ORM 还有些距离 |
![]() |
20
TanKuku 16 小时 54 分钟前
用过最舒服的应该是 kotlin 搭配 JOOQ
|
![]() |
21
askfilm 16 小时 54 分钟前
symfony + doctrine ORM
|
22
momo2789 16 小时 53 分钟前
说的我都想学习一下 Rails 了
|
![]() |
23
coolair 16 小时 45 分钟前 ![]() sqlalchemy
|
![]() |
24
cooper 16 小时 44 分钟前
Eloquent ( Laravel ) 或者 Active Record ( Rails )。个人更喜欢 Eloquent 。
|
25
dode 16 小时 40 分钟前
Spring JPA
|
![]() |
26
bugcreator 16 小时 37 分钟前
@1zh3n #19 Prisma 新加字段 drop table 再 craete table,恶心至极
|
![]() |
27
Valid 16 小时 33 分钟前 ![]() adonisjs and lucid
|
28
Binwalker 16 小时 33 分钟前 ![]() Active Record 吊打现在所有 ORM
|
29
redvoilin 16 小时 31 分钟前 ![]() rails 和 rails 的 orm Active Record
|
30
dddd1919 16 小时 31 分钟前
@zpvip #14 java/ruby 双修仔只能说,java 是工作,ruby 是生活,多人协作的大项目用 java 出错概率更低,个人的话 ruby 干啥都是飞起的效率
|
![]() |
31
NoobNoob030 16 小时 29 分钟前
Laravel 的 Eloquent 在我心中 NO.1
|
![]() |
32
williamherry 16 小时 29 分钟前 ![]() 肯定是 Rails 了
|
![]() |
33
tanszhe 16 小时 29 分钟前
@1wlinesperday 垃圾 一个半成品
|
![]() |
34
idragonet 16 小时 27 分钟前
c# SqlSugar
|
![]() |
35
bf109_ PRO rails 的 gem 挺魔幻的
|
36
TWorldIsNButThis 16 小时 19 分钟前 via iPhone
@masterclock 但是各种 poll 都显示 Scala 已经似了😭
|
![]() |
37
liuliuliuliu PRO ![]() c# 的 entity framework 啊,最好用没有之一
linq 语法、状态跟踪等等 举个简单的例子,就这个简单的例子很多语言都实现的很丑 var users = dbContext.Users .Where(u => u.Age > 18) .OrderBy(u => u.Name) .ToList(); users.First().Name = "zhangsan"; dbContext.Save(); |
38
nananqujava 16 小时 15 分钟前
想起了 Dapper, 以前 C#这些库都很少, Dapper 简单真好用
|
39
nananqujava 16 小时 14 分钟前
@liuliuliuliu #37 java 的现在也很丑陋
|
40
guotie 16 小时 9 分钟前
我觉得 typeorm 挺好,用过一次
|
![]() |
41
s5s5 16 小时 6 分钟前
@zpvip #14 总结:
正确性: Rails 在它所擅长的领域(尤其是快速构建 CRUD 密集型 Web 应用)确实拥有极高的开发效率、简洁优雅的设计(如 ActiveRecord 、Hotwire )和强大的生态系统。它是一个极其优秀的选择。 偏激性: 评论过度贬低了前后端分离、微服务及其他语言框架,将其固有的挑战(复杂性、性能瓶颈可能是设计不良的结果而非架构本身)简单等同于失败,并武断地定义了“99%”的网站需求(这无法证实)和所有开发者的偏好(这不符合现实)。对 AI 赋能的能力也过于乐观。 |
42
shellic 16 小时 2 分钟前
Laravel
|
![]() |
43
ultimate42 16 小时 2 分钟前
@bugcreator 你真深入用过 prisma 吗? prisma 在修改字段类型或字段名的时候才会删表吧,而且还需要你手动确认,新增字段怎么会删表,prisma 的痛点是得手动处理嵌套层级还有时区的问题
|
![]() |
44
serverKnignt 15 小时 58 分钟前
自己对 mybais-plus 进行了二次封装,感觉挺好用的。贴两个例子
@Override public PageVO<AiChatVO> queryChatPage(AiChatReq aiChatReq) { SysCacheUserDto adminUserInfo = getAdminUserInfo(); return select(aiChatMapper) .where() .eq(AiChat::getUserId,adminUserInfo.getId()) .orderDesc(AiChat::getCreateTime) .page(aiChatReq, AiChatVO.class); } @Override public Map<Long,ChatRecordMsgJsonDto> queryMsg(List<Long> ids) { if (CollectionUtils.isEmpty(ids)){ return Map.of(); } return where(aiChatRecordMsgMapper) .in(BaseDO::getId, ids) .hasMap( BaseDO::getId, v-> JSONObject.parseObject(v.getMsgDetail().toString(),ChatRecordMsgJsonDto.class) ); |
![]() |
45
kxg3030 15 小时 53 分钟前 ![]() php 的 orm 是所有语言最好用的 务必强大
|
47
coderzhangsan 15 小时 52 分钟前
rails 以及吸收它理念设计其他框架,例如 laravel
|
48
spritecn 15 小时 51 分钟前
@serverKnignt mybais-plus 不封装也挺好用的,我们只是因为主键用 UUID,做了一些通用查询
|
![]() |
49
liuxey 15 小时 44 分钟前
当年的 rails spring 都要给它让道
|
![]() |
51
qcbf111 15 小时 39 分钟前
为什么不用 mongodb 呢?
|
52
v2er119 15 小时 30 分钟前
不限语言?
delphi 的 bed ,一个 grid 包含所有批量 单行,单格 增删改查 分页,滚动加载,一行代码不用写。 |
53
v2er119 15 小时 29 分钟前
不限语言?
delphi 的 bed ,一个 grid 包含所有(批量 、单行、单格) 增删改查 分页,滚动加载,所见所得,一行代码不用写。 |
54
lmshl 15 小时 29 分钟前 ![]() Scala 的 Quill, doobie
https://zio.dev/zio-quill/ https://typelevel.org/doobie/ Rust 的 SQLx https://github.com/launchbadge/sqlx 我看中的是类型安全,编译期错误检查。不要有自作聪明的 DSL ,越接近 raw SQL 越好。 因为 SQL 才是真正通用的知识,任何妄图在编码中曲解或隐藏 SQL 的 ORM 框架我觉得都是垃圾。(此处点名批评 Hibernate 与同类框架) |
56
eastcukt 15 小时 14 分钟前 via Android
看到上面那些代码标识的 where ,order by 就头痛,直接写 sql 简洁清晰不好吗
|
![]() |
58
cloudzhou 15 小时 7 分钟前
@zpvip 然后 Rails 的市场占有率低到几乎工作都找不到,早先我第一次接触 Django ,相对 Java 世界耳目一新,惊为天人,但是两边开发之后,理解了静动态语言的各自适应处,理解为什么大型开发还是 Java/C#/Go 的选择
而有了 AI ,让静态语言开发更容易了,之前的繁琐细节更被磨平了 大型项目开发,第一要素不是高效,而是可维护、可持续 |
![]() |
59
jchnxu 15 小时 7 分钟前
|
60
kakki 15 小时 6 分钟前
ROR
|
![]() |
61
whatiam 15 小时 6 分钟前
@dode 同意。大家可以考虑这些场景:
* 兼容市面上绝大部分的数据库,包括这些数据库的变种和历史版本(这点得益于强大的社区方言维护,只需要引入对应的社区大佬写的方言包,就能适配数据库) * 自动建表/安全的维护表结构 * 几乎零感知,同时也可以支持手写 SQL |
62
james122333 15 小时 6 分钟前 via Android
答案是没有 SQL 本来就不是很好用 各语言框架也都是用起来马马乎乎可交差用或难受 目前计算机世界就是多数都是搞砸的东西
|
![]() |
63
accelerator1 15 小时 2 分钟前
@XCFOX #13 老牌的 sequelize 有啥问题?
|
65
james122333 15 小时 1 分钟前 via Android
把搞砸的东西当宝我是无法理解
|
66
stevefan1999 14 小时 57 分钟前
Entity Framework Core + ASP.NET Core + Hot Chocolate = Free GraphQL Server
|
![]() |
67
mywaiting 14 小时 53 分钟前
纯粹 ORM 肯定是 rails 这个是没有之一的存在
但是长期工作中,我忽然发现很难脱离 SQL 去处理极端的情况 现在基本就是用各种 ORM 对应的 SQL 工具层,或者增强版的 DBAPI 层实现,比如 SQLAlchemy Core 部分 简单的 CURD 用其工具层的实现,代码更少更方便 复杂的查询,直接用 raw sql 反而更直观更好理解 |
![]() |
68
lovedebug 14 小时 49 分钟前
NestJS 算是很好用的 Node.js 框架了
|
69
kakki 14 小时 20 分钟前 ![]() ORM 是为了解决开发效率而存在的, 串出来的 SQL 教徒差不多得了, 怎么不去手写 assembly. 更直观更好理解, 但是开发速度完全不谈是吧?
|
![]() |
70
niubiman 14 小时 19 分钟前
必须是 entity framework
|
![]() |
71
bowencool 14 小时 14 分钟前
@bugcreator #26 照你这么说,prisma 完全不可用,这可能吗。。。
|
![]() |
72
zeuss 14 小时 11 分钟前
|
![]() |
73
manhere 14 小时 10 分钟前
php 平台的无敌,其他的都是弟弟
|
75
leoskey 13 小时 56 分钟前 ![]() 那必须是 EntityFramework 了。一个 DbContext 搞定初始化,一个 migrations 搞定数据表,一个 linq 搞定查询
|
![]() |
76
niubiman 13 小时 51 分钟前
@eastcukt 因为,where, order by 不止是 orm 中可以使用,在 c#中,对 list ,array 等等集合、数组都可以进行 where ,select ,order by , 语法完全一致,可以说是所有语言中最优雅的了, 没有之一,不服举例来辩
|
78
K332 13 小时 46 分钟前
|
79
pulutom40 13 小时 45 分钟前 via iPhone
PHP 的 orm 最好用,实际工作中直接写 sql ,然后框架仅仅转成结构体就行了,简单的最好用
为什么要直接写 sql? 1.sql 表达比各种蹩脚的 where and or 函数表达简洁清晰高效太多了,特别是复杂 sql 2.数据库 proxy 引入了太多方言,没有任何 orm 框架考虑过数据库 proxy 的问题 |
![]() |
80
tanszhe 13 小时 41 分钟前
都是范范而谈 来列举出来
1. 一对一 2. 一对多 3. 多对多 4. 多态 5. 非主键的关联(某系 orm 只支持主键) 6. 注释(强制走主库) 7. hook 支持 8. 跨库关系预加载( mysql 预处加载 pgsql ) 9. 安全性 10. 缓存 |
![]() |
81
beginor 13 小时 25 分钟前
NHibernate 成员路过,NHibernate 不是性能最强的,但是是最优雅和完善的。
|
![]() |
82
guiyumin 12 小时 49 分钟前 ![]() 我觉得 orm 最大的问题是尝试一个框架来覆盖所有数据库
一个库就应该专精于一个数据库 |
![]() |
83
lambdaq 12 小时 36 分钟前
ORM 你只管负责好用就行了
但凡加一个 redis es mongo 一用一个不吱声 |
![]() |
84
xiaoshan5733 12 小时 34 分钟前
Drizzle+1 ,符合直觉编程,上手快
|
![]() |
85
zpvip 12 小时 33 分钟前 ![]() @s5s5 #41, 来来来, 举例说明, 哪个前后端分离、微服务及其他语言框架的 CRUD 不能用 Rails SSR 搞定? 复杂性、性能瓶颈是出在 Rails?
前后端分离的出现是因为要切分任务, 微服务是切分功能, 都是在没有 AI 的情况下, 人的精力和水平有限, 搞不定. 一般要升职, 就要用前后端分离和微服务跟自己的 Manager 画饼, 然后招一堆人做自己的手下, 自己就能管人了, 然后每天开站会, 让各个团队对齐颗粒度, 尽做些浪费时间的事. 性能的问题 99%的网站都不用考虑, 最多做个 LB, 大不了 K8s, 我做 IoT 的, 时序数据库都是 TB 级别, 单表都上 TB, insert 都是时刻不停 1000 条一批插入的, 瓶颈绝对不在 Rails. @cloudzhou #58 用的人少有利有弊, 利大于弊. Java 仔就像麦当劳的员工, 随便找随便开, 有你不多没你不少. 国内找不到可以找国外的. 那些整天宣扬静态,可编译语言适合大工程, TS 有类型更安全之类的人, 都是活在自己的想像里. 我用 Ruby 多年, 修过数不清的 Bug, 唯独没有遇到过数据类型的 Bug. 现在有了 AI, 不仅仅是静态语言开发容易了, 动态的也更容易啊, 测试都能给你写好, 什么临界条件都给你测全了. AI 写 Rails 的 RSpec 测试写得那叫一个漂亮. Java 仔, C# 仔, 沉迷在你们的 DI 和 Service 里面吧, 说实话, 这么罗嗦的框架, 我看看代码都替你们头痛, 好多预防性编程, 把程序员当傻子防. |
![]() |
86
noyidoit 12 小时 28 分钟前
四年没碰 PHP 了我还是很怀念 Laravel 和 Eloquent
|
87
hervey0424 12 小时 26 分钟前
说 java 的哪些一定没有用过其他语言
|
![]() |
88
xiangyuecn 12 小时 22 分钟前
在我眼里要求比较低:只要面对复杂 SQL ,不需要我自己去写一个框架的就行🐶
不能良好支持手写 sql 的,就是垃圾 ORM 框架,尤其是那些严重恶意阻碍手写的。反之就是优秀的。😂 类似 c#的 linq 那种形状的就差不多,但肯定不能学 linq ,linq 那玩意写起来太屎了😂 |
![]() |
89
dragondove 12 小时 16 分钟前
@masterclock doobie 不是 orm 呀,算是个简易的 sql builder ,都与 sql 构建器,我推荐一个 sqala
文档网站: https://wz7982.github.io/sqala-doc/ scala 用户站介绍帖: https://users.scala-lang.org/t/sqala-compile-time-sql-for-scala-3-with-named-tuples-and-semantic-checking/10837 我个人也不喜欢 ORM ,隐藏太多细节了,门槛太高,个人感觉 sql builder 完全够用够好用。 |
![]() |
90
niubiman 12 小时 12 分钟前
@xiangyuecn 不想写 linq 你可以写 lambda 表达式啊,两种写法都是可以的
|
![]() |
91
yoshiyuki 12 小时 9 分钟前 ![]() php 里面 yii2 自带的 orm
|
92
dotw2x 12 小时 9 分钟前
Rails 的 Active Record 和 C#的 EF 都用过,就开发使用体验而言,两者很相像,但 ef+linq 还是比较顺手和简单的.
|
93
y2025 12 小时 0 分钟前
必须 Rails ,用了很多年,后来在其它语言上再也没有遇到同级别的
|
![]() |
94
bingo084 12 小时 0 分钟前 via Android
Kotlin+Jimmer ,不过我没用过其他语言的,但是这个对比 JPA 、Mybatis 之类的都是爆杀
|
95
dq19871123 11 小时 53 分钟前 ![]() 我投 Entity Framework 一票
|
![]() |
96
dragondove 11 小时 52 分钟前
@liuliuliuliu 你这个例子没什么难度啊,用 scala 的 sqala 这么写就行:
val users = db.fetch(query: from[User].filter(_.age > 18).orderBy(_.name) ) db.save(users(0).copy(name = "Dragon")) 甚至大部分人唾弃的 java 都有类似的库可以做到,java 的 drink 库 https://github.com/kiryu1223/drink 可以这么查 List<User> users = client.query(User.class) .where(u -> u.getAge() > 18) .orderBy(u -> u.getAge()) .toList(); 只不过 drink 的更新不支持按照对象更新,用个 hibernate 之类的库配合就行。 |
![]() |
97
wackyx1996 11 小时 50 分钟前
大胆猜测 评论区应该只有用过 laravel 和没用过 laravel 两类人
|
![]() |
98
XCFOX 11 小时 43 分钟前
@accelerator1 #63
Sequelize 研发的时间过于早了,Sequelize 刚开始发布的时候 TypeScript 还没有知名度。时至今日 Sequelize 对 TypeScript 的支持算不上好。我觉得将 Sequelize 是为 `TypeScript ORM` 是有点牵强的。 另外 Sequelize 在各个 benchmarks 中性能稳定垫底: https://orchid-orm.netlify.app/guide/benchmarks.html |
99
dreampursuer 11 小时 42 分钟前
Grails
|
![]() |
100
simo 11 小时 40 分钟前 ![]() 问题应该改下:列举下你用过(每种至少两个中型及以上完整项目开发经验)的框架和 orm ,最少 3 种,从好到差,依次排序(无任何歧视,3 种以下,不要回复)
有人只用过一个,最好最差都是这个 |