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

2017-09-28 19:58:12 +08:00
 twogoods
说说为什么?还有可以告诉我哪个语言下哪个库超好用吗?想多了解了解,尝试造个轮子,逃...
8989 次点击
所在节点    数据库
111 条回复
bzzhou
2017-09-29 12:45:00 +08:00
ORM,写出来的语法比 SQL 漂亮
msg7086
2017-09-29 13:01:08 +08:00
@timwei
我这么问你吧。
1. 你知道 conflicts = conflicts.where(protocol: [:udp, :both]) 这里返回的 conflicts 的类型是什么吗?
2. 你知道上面代码最差的条件路径下会执行几次 SQL 语句吗?
msg7086
2017-09-29 13:06:56 +08:00
@timwei 上面代码里的确有个可以优化的点,那就是 return if empty?应该改成在 first 之后 return unless conflict。
wekw
2017-09-29 13:18:37 +08:00
ORM 可以大幅提升代码质量,甚至直接把 M 层归零。如果你能理解这句话,恭喜你拿到了高级 web 程序员的入场券。
tabris17
2017-09-29 14:15:44 +08:00
GraphQL
tabris17
2017-09-29 14:17:31 +08:00
用 ORM/ActiceRecord 解决 99%的业务,剩下 1%可以使用原生 SQL
codeyung
2017-09-29 14:22:33 +08:00
手写
honkew
2017-09-29 14:35:30 +08:00
ORM 做不到的就手写
evlos
2017-09-29 14:41:25 +08:00
以前坚持手写了几年,后来只有在联合查询的时候部分手写,大部分用 ORM
shakoon
2017-09-29 14:45:04 +08:00
手写了十多年 SQL,表示很顺手,没有改变的动力
greatghoul
2017-09-29 14:48:01 +08:00
都喜欢
thisisgpy
2017-09-29 15:03:21 +08:00
Java。我一直用 mybatis 手写 SQL,我承认,我优化不好 ORM,所以选择手写。
timwei
2017-09-29 15:48:01 +08:00
@msg7086

这检查方法内 conflicts 只用来产生 conflict 做检查

1. 所以用 where 回传 relation,或是用 select 回传 array 都能做到

用 where 还多一次查询。


2. 这个检查方法会增加两次查询,分别是 line3 where/where.not 跟 line5 的判断内 where

而后面说的 first

是指你其实只用了 conflicts 第一个元素,应将 line14 的 first 加在 line5 的 where 后

让你的查询多了 LIMIT 只返回第一个记录或 nil,而不是传回含 N 条记录的 relation 再取第一条记录
jydeng
2017-09-29 15:53:20 +08:00
一直手写,有时候觉得烦
zhouyou457
2017-09-29 16:12:39 +08:00
最开始编程的时候都是手写,后面发现维护起来太痛苦,而且也无法做到数据库的无缝切换。后来,老大在 spring jdbc 上简单的封装了一层,然后使用代码生成器生成代码,感觉很爽,但是复杂逻辑还是要手写。。现在使用 mybatis,能用三方库实现的功能绝对不手写,复杂逻辑写到数据库视图中,mybatis 的 xml 现在看着非常简洁。。说实话,还是得看项目情况和人员配置,如果项目急,人员都是新手,那还是别手写了,影响项目进度。
ljh0585
2017-09-29 17:08:11 +08:00
一般跟团队。。
团队走 ORM 那就用 ORM,团队都手写那就大家都手写呗。
ss0xt
2017-09-29 17:11:06 +08:00
嗯 键盘敲,不手写(滑稽
monsterxx03
2017-09-29 18:06:09 +08:00
以前都是 orm, 后来全手写, orm 隐藏了太多细节, 调优的时候很痛苦, 怕手写出注入的,基本用 orm 也能用出注入来.
aa23
2017-09-29 18:22:30 +08:00
我喜欢用存储过程
dremy
2017-09-29 18:34:43 +08:00
手写 SQL 一时爽,重构火葬场

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

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

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

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

© 2021 V2EX