为何不选 Hibernate,非要 MyBatis?

329 天前
 dc2002007

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

当然我首先是不能接受在 xml 里写 sql 这种行为的!
orm 不够优秀吗?
15096 次点击
所在节点    Java
130 条回复
jccily
329 天前
Hibernate 相较于 MyBatis 上手成本高点。国内互联网行业发展快,需要新手速成,立即投入一线搬砖。因此当然是越容易上手的技术越受欢迎。
jkc626
329 天前
总结下部分人的话:我用某框架,别人不用,是因为别人水平差学不会。
对此想借用 linus 说的一句话:talk is cheap. show me the code.
要炫技请上 GitHub
Sprdance
329 天前
个人理解是 MyBatis 比较符合 DDD 直觉:Java 代码写原始数据接口定义,XML 写实现。并且 MyBatis 对 Java 对象和数据库对象的相互转换比较友好
(也有可能是我 MyBatis 写多了……)
wdlth
329 天前
如果用 pgSQL 、Hive 或者要写窗口函数那些,一般都是直接复制查询工具的 SQL ,不需要再次去写查询代码。
ShadowPower
329 天前
Hibernate 不如 MyBatis 灵活、高性能、轻量。

公司的内部框架已经把 MyBatis 的用法封装得跟 Hibernate 一样了。
用起来感觉几乎完全一样(只是长得不一样),绝大多数业务代码一行 SQL 都不需要写,还简化了一些通用业务逻辑。
例如完全无感的多语言设计,只需要给实体类和实体类属性加注解就可以了。会自动根据当前用户设置来更改 SQL 语句。
其他的例子,例如给实体类加个流水号编码注解实现创建数据时自动生成符合规则的流水号。有前后缀、用户标识、日期时间、自增序列等等信息。
还有很多很多。

基于 MyBatis 做这种定制比较简单,容易理解。而 Hibernate 就很复杂了。
angryfish
329 天前
综合 op 的综合总结评论来看,op 就是没看评论自己总结了一下。
wetalk
329 天前
@zhangxh1023 根据表模型逆向自动生成,没几个人从头开始写 xml
yogogo
329 天前
@JerryYuan #4 很简单的关联,配置好关系
leohuangsulei
329 天前
@heeeeeem 简单查询都无所谓,你复杂一点方法名太长了,有些不规范的还带下划线 看的难受
romisanic
329 天前
综合 OP 的 append 来看,OP 的 append 把自己特点总结了一下,并想当然的扣到了整个国内研发的头上。
billlee
329 天前
@murmur yaml 不但支持换行,还支持好多种换行方式 🐶
waterlaw
329 天前
mybatis 灵活性更高一点,hibernate 封装性更好
wupher
329 天前
都有用过,但新项目一般使用 JPA / Hibernate ,相对日常出活更快。
TGhoull
329 天前
我觉得好多人都没说到点上,不是不选 Hibernate ,而是在国内你根本没得选,因为大部分项目用的基本都是 Mybatis, 后续如果有新项目肯定还是选择自己熟悉的 ORM 框架,你如果观察国外社区讨论关于 ORM 选择,肯定是 Hibernate 占有率大大高于 Mybatis ,因为国外的项目大部份都是使用 JPA 那一套,有时候优缺点并不是首先考虑的点,最契合自己团队的才是好的
changdy
329 天前
我决定往 op 身上开个炮 ..
你用 JPA / Hibernate 了解过数据库的那些技术 和 trick ?

会用临时变量, 虚拟列 ,强制索引 , STRAIGHT_JOIN 吗?
cte 会玩吗?

当你决定思路定格在 orm 上时 ... 你就是真的一个 crud boy 了
jaycelhz
329 天前
我感觉从开始学 java 就开始隔几天看到这种问题,过几个月我也再发一遍, 水经验的好问题
carytseng
329 天前
做多几个复杂报表功能,可能就不会有啥疑问了
blackmirror
329 天前
其实问题在于甲方需求经常乱改。。。。。
wlm201219
329 天前
@ASpiral 有的,自己写 jpql
ZeroDu
329 天前
用 Mybatis Plus 现在基本很少写 xml ,联查甚至还有 mybatis plus join ;真的很少写 xml 了

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

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

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

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

© 2021 V2EX