为何不选 Hibernate,非要 MyBatis?

329 天前
 dc2002007

###一直不能理解 Hibernate 这么优秀的 orm 思想框架,为什么这么多项目还选择了在 xml 里写 sql 的 MyBatis ,求解惑?

当然我首先是不能接受在 xml 里写 sql 这种行为的!
orm 不够优秀吗?
15098 次点击
所在节点    Java
130 条回复
nimble
329 天前
国产的 mybatis-plus 使用的方式跟 jpa 和 hibernate 一样,如果你的项目使用的是 mybatis-plus ,jpa 完全没问题,并且支持的功能更多,除了它放弃了恶心的 xml 写 sql 。
wlm201219
329 天前
@BiChengfei 我觉得,从这个帖子的讨论和现在 35 岁就业危机来看,国内并不会从 mybatis 转向 jpa
ZeroDu
329 天前
@ZeroDu #100 甚至可以说:你用 Mybatis 这些还需要写 xml 的情况,放在 Hibernate 里面必然也是需要自定义 sql/hql 的
aristotll
329 天前
用 jooq 逃
pigspy
329 天前
作为一个 hibernate + jpa 的使用者本来想认真回答下的,不过这 lz 看上去是钓鱼的,真是建议 nuke 了
izzy27
329 天前
Hibernate 不好念,不利于传播
jason31415926
329 天前
@wlm201219 可以聊聊国内计算机教育脱节的问题吗,谢谢
jeesk
329 天前
这么说吧, 一个报表连表 5-10 张, 你还会用 orm 吗? 谁不想偷懒直接用 orm ?
jeesk
329 天前
现在开源的项目多大多都是 mybatis plus , 各种泛型,还不如 jdbc template 呢,
jeesk
329 天前
国外的屎都是香的, 真的是。 国外 orm 用得多,国内用的少, 那么国内就是程序员不行。
grpc web 就不遵守 rest 规范,grpc web 全是 post. 一大群人说香,google 就是正义, 这风气真是太舔了。
morgan1freeman
329 天前
国情所致吧,国内的项目大多短平快,半年就要出成绩,甚至 2 个月就要出成绩,而且码农本身真的很便宜(相对国内的公司收入而言),一个项目再烂,再狗屎都能请到人来维护,像 JPA 这种 Model First 的框架当然不合适,远没有 mybatis 面向 db 表驱动的开发模式搞的快。

要是美国 2000 美金就能雇佣工程师去吃屎,资本家怕是笑得合不拢嘴,做梦都能笑醒,软件工程?啥是软件工程? 2000 美金雇个大学生,让你在屎山里面 996 遨游不香么?这比 GPT 高级不知道多少的真人工智能,才 2000 美金在就中国能雇佣到一个入门的。

讲一个真实的案例,我们系统里面有一个车辆模型,光是 status 状态就好几个, 审核状态,车辆可租售状态,催审状态 等一大堆的状态变量,而这些状态变量本身相互之间还有依赖。

结果这些变量全部都在各个接口跟 job 里面来维护,本来这种状态变化最好的方式当然是维护一个状态机模式,在模型内部维护车辆状态,不至于代码逻辑失控。

但是我们的现状就是类似 mybatis 这种,天然就是面向 db 的(虽然 mybatis 有提供一个表针对多个对象的转换服务,但是真的很少看到有人用,毕竟是个半残的 ORM ),几乎不存在逻辑内聚的需要,这个开发在 job 服务里面 query 出来 update 一下,那个开发在接口里面 query 出来 update 一下,代码多了,服务多了,基本上就失控了,第一版写的人很爽,因为一开始状态很少,变量也少,逻辑还没有分散在各个代码仓库(草台班子还用上了微服务,逻辑没有内聚,全靠人肉对代码进行跨仓库静态分析),基本上不会有什么思维负担,对于三版第四版维护的人来讲,简直比吃屎还难受,时间评估的多,还容易改错。

说到底用 JPA 跟用 Mybatis 是两种截然不同的开发模式跟思维方式,一个系统里面 OLTP 的部分出错了,需要花费巨大的成本去定位问题,以及修复数据,并评估对生产数据带来的影响,成本极高。对于业务逻辑相对复杂的项目,建议使用 JPA 去好好建模分析的,减少业务变动对于后续维护者带来的心智负担。

对于需求变化极快且复杂的 OLAP 需求,这种功能大多都是面向内部,用 SQL 怎么快怎么来,就算出错也没事,改改就好,而且我经常跟人讲,OLAP 就是要打破业务逻辑里面的 Model ,甚至用 es 来重新聚合 Model 的数据都没有问题,因为 OLAP 就算出问题,who care ?分析数据?根本不重要的东西。

以我之前那个案例来讲,有一个哥们因为车辆状态太复杂,帮业务下线一匹数据,job 维护车辆的逻辑写错了,导致生产上几千辆车 没法进行租售,直接就是生产重大事故,要是做个报表联几个表出一个后台页面,就算是错了又能怎样?糊弄一下就过去了。
GoRoad
328 天前
很奇怪,翻了一下帖子 大家都是在友好讨论,反而 op 的 append 有些破防了,我认为 op 这是在恶意引战不成破防了,@Livid 恶意引战
chuck1in
328 天前
hibernate 除了本身的 ORM 概念以外,其实还有一些其他的概念,会有一些心智负担,有些可能会不太喜欢这个概念。
mybatis 我想胜在简单吧,在东亚比较流行。

最后我建议也可以试试 JPA 和 Mybatis 之外的第三种选择:JOOQ
https://www.v2ex.com/t/1007609#reply12
chuck1in
328 天前
@aristotll 同样支持 jooq + 1
chuck1in
328 天前
@morgan1freeman 2000 美金恐怕雇佣的还不止入门的哦,雇个接近高级的,运气好雇个高级也不是不可能的。
Dragonphy
328 天前
jpa 能不能做到 mybatis-plus 那样清晰的日志,一堆 alias t.x,t.x 找半天才知道是哪张表
totoro52
328 天前
看了你的 append 好了 黑名单见, 流量赚了马跑了
yoloMiss
328 天前
我曾经见过把 hibernate 又封了一层的项目,用起来跟一坨大便一样。真的是会的人简单,不会的人瞎几把搞啊。
dyv9
328 天前
@yooomu 最近特意把我接手的 3 个项目换到 Java 21 编译级别,开发中观察我们的项目对 Java 21 的兼容性,我相信我啥也不需要改就可以跑起来。
gowk
328 天前
@morgan1freeman #111 感谢分享,太 tm 真实了!

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

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

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

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

© 2021 V2EX