复杂的业务 SQL 大家依然坚持用 ORM 还是原生拼装的?
我比较倾向于拼装原生
简单的可以使用 ORM
1
springmarker 2017-05-06 12:02:12 +08:00 via Android
缓存和注入解决起来不麻烦吗
|
2
mokeyjay 2017-05-06 12:07:41 +08:00
为啥不 ORM 呢……多省事儿,还有闭包嵌套拼不出来的复杂 SQL 吗?
|
3
coolair 2017-05-06 12:09:10 +08:00 via Android
我用的 ORM,感觉比拼 SQL 更难维护,更难理解。
|
4
TangMonk 2017-05-06 12:11:24 +08:00 via Android
得看用什么语言了,ruby 我用 orm,其他语言我用 sql builder
|
5
Ouyangan 2017-05-06 12:12:46 +08:00
orm 什么 sql 拼不了啊...
|
6
shoaly 2017-05-06 12:28:49 +08:00
你应该说反了, 简单的随便用那个都可以, 复杂的 sql 跟复杂的正则一样, 敲的时候一时爽, 过两天来看已经是路人, 只能说爱过
|
7
leeg810312 2017-05-06 12:43:27 +08:00 via Android
需要写复杂的 sql 才能实现功能,说明系统设计有问题
|
8
111111111111 2017-05-06 13:01:28 +08:00
orm 已经是政治正确了么……
|
9
zhy0216 2017-05-06 13:40:46 +08:00 1
那个, 上面说 SQL 简单的同学看下这个: http://assets.en.oreilly.com/1/event/27/High%20Performance%20SQL%20with%20PostgreSQL%20Presentation.pdf
有 CTE 的 SQL 是图灵完全的... |
10
zhy0216 2017-05-06 13:44:11 +08:00
还要加上 OVER (PARTITION BY ... ) 这个语句才是图灵完全. 这个语句今天才看到...
|
11
fuxkcsdn 2017-05-06 13:53:55 +08:00 via iPhone
@springmarker 拼接 SQL 难道就意味着不能用变量绑定了?
|
12
cloud107202 2017-05-06 14:09:35 +08:00
优先 orm 吧 复杂的话着重优化建模,性能敏感场景再裸写 sql
|
13
neoblackcap 2017-05-06 14:17:16 +08:00
@zhy0216 然而大家使用的 mysql 并没有 CTE
|
14
visonme 2017-05-06 14:32:09 +08:00
在我的项目中如果涉及到复杂的业务,而在整个项目中又需要采用一些设计方法,比如 DDD,那这样我会有限考虑 ORM,当然 ORM 不是万能的,很多复杂的查询还是需要采用原生的 SQL,而现在大多数的 ORM 框架也支持原生 SQL 操作。
就楼主的问题,我反而觉得很多简单的应用应该考虑原生 sql 而不是 ORM |
15
BOYPT 2017-05-06 14:37:54 +08:00
从项目角度考虑的话,主要是看维护人员的技能树
|
16
reus 2017-05-06 14:41:32 +08:00 2
有的人工作内容就只是 CRUD,用 ORM 就足够了,根本接触不到复杂的系统,甚至认为系统复杂是设计的问题,而不是业务本身就复杂。这些人遇到真正复杂的业务时,会怎样应付,我十分清楚。
另外,就算是 mysql,也早就支持服务端的 prepare 语句,哪还用拼接。 |
17
annielong 2017-05-06 14:57:28 +08:00
我认为要看业务的需求,如果是模块化的业务,再复杂也能用 orm 拼装,但是如果不是通用,而是非常特殊的业务,可以用 sql,
|
18
assad OP 受教了,感觉 ORM 还是有点用起来别扭,而且需要一定的学习成本。SQL 写的太久了,总觉得 SQL 解决一切问题!
|
20
abcbuzhiming 2017-05-06 16:49:48 +08:00
我只说一点,国内 Mybatis 之所以全面取代了 Hibernate 的根本原因,就是因为 ORM 一旦要处理复杂查询,就会倒退回 sql 查询,因为 ORM 自己压根就无法处理复杂查询,没有哪个 ORM 工具能全面的处理复杂查询,而且现在根本不需要你自己拼接 sql 了,sql 语句事先写好,然后映射到方法上,参数化查询
|
21
abcbuzhiming 2017-05-06 16:52:01 +08:00
@leeg810312
话别说太满: 1.现实是没有完全合理的系统 2.我不知道你有没有接触过复杂报表需求,千奇百怪的脑洞,没有复杂 sql 还真就搞不定,计算机建立的模型并不能完全模拟现实的,有的时候只能靠人工去补,你以为 ORM 就能对付所有情况吗。我建议你去了解一下为啥国内 Mybatis 基本全面取代了 Hibernate |
22
abcbuzhiming 2017-05-06 16:53:45 +08:00
@reus 有些人看的太少,他们忘记了一件事情,人类的计算机技术还远远没牛逼到了对现实直接建模的程度,这就注定了有一些业务只能迂回实现。这就造就了复杂情况
|
23
aksoft 2017-05-06 16:54:41 +08:00
orm 复杂的也有坑
|
24
gap 2017-05-06 17:09:29 +08:00 via iPhone
Java Jooq 這種 sql 封裝的解決方案挺好的
|
25
ivvei 2017-05-06 17:16:31 +08:00 via Android
当然是选择自己写啊。ORM 最适合单表。复杂点的,搞定 ORM 的时间够写 N 个 SQL 了。当然,也可以查视图。但是视图本身也是 SQL 写的啊。
|
26
danielmiao 2017-05-06 18:31:39 +08:00
低并发场景,例如订单,用户属性,用 ORM,高并发场景,如优惠券,活动用 SQL,但凡需要复杂的多表联合查询的,都用业务逻辑解决,数据库就是存数据的,不处理业务逻辑
|
27
zhy0216 2017-05-07 00:25:46 +08:00
@neoblackcap 我以为 Postgres 更流行呢...
|
29
letitbesqzr 2017-05-07 22:19:56 +08:00
@abcbuzhiming 国内 Mybatis 之所以全面取代了 Hibernate ? 各大软件厂商大量用,并且看看 mybatis 那更新速度能忍? hibernate 周周发新版本 每次大版本更新很多功能都很惊艳。 我们现在做医院系统 几千张各种复杂的报表 没手写过一句 sql,用 jpa 配合 java 8 没遇到不能满足的需求
|
30
abcbuzhiming 2017-05-07 22:58:21 +08:00
@letitbesqzr “算钱的地方,就别用 Hibernate ”,这是当年 javaeye 长贴讨论后得到的结果,Hibernate 再更新来更新去,说白了还是把表映射为对象的那套思路,这套思路是有极限的,关系数据库并不完全是对象数据库。既然你没碰到必须手写 SQL 的场合,那就不要自以为是的觉得自己的系统已经足够复杂,那只是你所呆的环境比较幸运罢了。
我并没有说 Hibernate 就完全不适用了,另外其实我本人是反对为了写 SQL 去用 Mybaitis 的。 |
31
8355 2017-05-08 02:34:19 +08:00
必然 ORM 啊 因为要么你就全 ORM 或者 99%以上 ORM 你一复杂就原生 简单就 ORM 不觉得代码看起来很奇怪吗?
|
32
letitbesqzr 2017-05-08 08:56:45 +08:00
@abcbuzhiming 为啥 用 sql 不一样 各种 sum count 统计? hibernate 不一样可以? 又是谁告诉你 现在的 hibernate。 那这样说吧 我在做银行的时候 也是大量用 hibernate 也不会写 sql,那请问银行的系统报表也是极简单?
|
34
assad OP @letitbesqzr 不觉得写起来还不如写 SQL 来的快
|
35
xeneizes 2017-05-08 09:32:49 +08:00
复杂的业务 SQL 还是去写存储过程吧
|
36
Gathaly 2017-05-08 16:22:05 +08:00
orm 只适合类单表操作,报表的还是得用 sql 直接
|
37
msg7086 2017-05-08 16:48:00 +08:00
|
38
assad OP @msg7086 单表和稍微少一点的 ORM 挺好使。但是复杂的报表,各种连,各种函数等,ORM 感觉没 SQL 来的爽,我们之前一个报表,DB 只给把老长的 SQL 写好了,直接用了事!
|
39
abcbuzhiming 2017-05-08 20:39:14 +08:00
@letitbesqzr 真不想争辩了,银行的系统报表就一定是复杂的了?你连联表都没提,难怪还觉得 hibernate 能打天下呢。hibernate 这玩意要真有你想的那么万能,ibatis 就不会出现,就这话,多的不想说了,反正爱用啥是你的自由。不会再回复你
|
40
atcdef 2017-05-08 21:54:22 +08:00
坚持写 sql,orm 感觉反而是复杂化了。写 sql 我脑袋更清爽些,我是做企业里各种稀奇古怪报表之类东西的,不用 sql 的话,没法完成。
|
41
dzhou 2018-10-30 11:55:22 +08:00
@abcbuzhiming 报表是有专门的报表模块的,报表工具很重要,和普通的业务代码是分离的
|
42
dzhou 2018-10-30 11:56:33 +08:00
简单的增删改查 ORM 是很完美的选择;略复杂一点的就用原生 sql ;报表:请用专业的报表工具;
|