为何不选 Hibernate,非要 MyBatis?

2024-01-26 11:15:02 +08:00
 dc2002007

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

当然我首先是不能接受在 xml 里写 sql 这种行为的!
orm 不够优秀吗?
18535 次点击
所在节点    Java
130 条回复
weijancc
2024-01-26 12:10:30 +08:00
建议你实际项目用过 hibernate 再来说话, 如果用过, 一定会不可避免的出现需要在代码内写 HQL 或者 SQL 的情况, 和 xml 对比起来, 在代码内写这些 QL 实在是恶心
09an6YfX8rNvIG92
2024-01-26 12:16:51 +08:00
ORM 学习成本比较高,
想用好 ORM 需要对面向对象编程有一定的理解,而使用 mybatis 只要会 sql 就好,在这个 35 岁就面临就业问题的社会,前者自然要被淘汰的
再加上初期大厂的带头作用,国内计算机教育的脱节,mybatis 流行也就不奇怪了
09an6YfX8rNvIG92
2024-01-26 12:20:20 +08:00
@weijancc 我反倒觉得在代码里写 jpql 很舒服,因为 idea 的检测比在 xml 的 sql 完善得多
BiChengfei
2024-01-26 12:21:50 +08:00
spring data jpa + Mybatis ,复杂查询用 mybatis 写,其他用 jpa ,爽的飞起
mybatis plus 完全没有 jpa 好用,稍微使用以下就能感觉到
听说现在国外 jpa 的使用占比很高,国内过去十年,行业人数快速膨胀,培训班很少有教 ORM ,旧项目很多使用的 Mybatis ,为了保持公司技术栈统一,众多原因,Mybatis 占比一直居高不下
但随着行业沉淀,从业人员水平提升,JPA 占比会慢慢提升,Mybatis 终将推出历史舞台
Nosub
2024-01-26 12:22:09 +08:00
不用思考,hibernate 成本太高,一般人掌握不了,你要一个面向过程的程序员去写面向对象的代码,就算用 Java 也可以写出 c 的既视感。
maigebaoer
2024-01-26 12:26:08 +08:00
@Nosub 我这是用 php 和 go 写 c 风格代码🫣
githmb
2024-01-26 12:28:26 +08:00
我不是不能接受在 xml 里写 sql 这种行为

我根本不想碰 xml 这种脑瘫东西!
zed1018
2024-01-26 12:32:12 +08:00
@githmb 哈哈哈哈哈哈,我也是,我是因为搞过 android ,对 xml 深恶痛绝。
xiaowowo
2024-01-26 12:34:04 +08:00
因为 hibernate 是一个类似鸡肋的东西,设计比较复杂。功能又不是那么强大。
bthulu
2024-01-26 12:35:06 +08:00
mybatis 培训班半天成型, hibernate 至少三天, 是你你选哪个?
dabai0806
2024-01-26 12:48:21 +08:00
简单 sql 没必要, 复杂 sql 弄不了
nothingistrue
2024-01-26 12:58:25 +08:00
Hibernate 与其说是 Object Relation Mapping ,不如是是 Object Model using Relation Model as Technical Implementation 。Hibernate 必须搭配脱离数据库的对象模型才能用好,如果你还是面向数据库关系数据模型来用,那用起来是非常难用得。

让 Hibernate 被 MyBatis 替代的,正好是让 Hibernate 被大力推广的 SSH 分层架构。这个鸟架构首先是用错了被 EJB 的重量级给搞应激了,完全取消有会话 Bean 从而导致了数据跟程序的分离,进而导致 Java Web 开发从面向对象开发,变成了虽然用着面向对象语言,但搞得还是面向函数,甚至直接面向 SQL 的开发。SSH 实际上用错了 Hibernate ,Hibernate 压根就不适合这种面向函数的开发模式,自然就被替换掉了,当时就算没有 ibatis 也会有其他的替代。至于 MyBatis ,只不过是 ibatis 的封装衍生而已。

@potatowish #8 MyBatisPlus 并不是 MyBatis 的衍生,它是模仿的 Spring Data Jpa ,只不过前者用 MyBatis 当技术实现,后者用 Jpa ( Hibernate ) 当技术实现。
Kaiv2
2024-01-26 12:58:59 +08:00
能列一下 Hibernate 对比 MyBatis 优秀的地方吗?
我使用 MyBatis 感觉是简单轻量高性能。
Hibernate 笨重性能相对较低,复杂查询还是得用 SQL
yty2012g
2024-01-26 13:17:18 +08:00
Spring Data JPA ( Hibernate )、MyBatis ( iBatis )都写过,最近在玩 JOOQ ,觉得写起来好爽啊
wswlaz
2024-01-26 13:20:52 +08:00
个人项目我选 springdata jpa , 公司项目用 mybatis
ramoudev
2024-01-26 13:26:35 +08:00
mybatis 还是挺重的,mybatisplus 仅仅是一个反射升级版,jpa 是思想
murmur
2024-01-26 13:34:27 +08:00
@githmb xml 有原语,可以直接校验格式,企业开发这玩意简直是神器
murmur
2024-01-26 13:35:18 +08:00
而且 xml 可以换行,你 json 支持换行么,yml 支持换行么,大段数据不让换行会死人的
THESDZ
2024-01-26 13:35:30 +08:00
短平快,更适合国内弯道超车的思想理念.
limaofeng
2024-01-26 13:39:49 +08:00
用 hibernate 必须要 hql 吗? 我就觉得 jpa 比 mybatis 方便。普通查询之类更本用不上 sql , 统计要写 sql 的时候也没 hql 啥事。如果还把 hibernate = 代码里面写 hql ,就是不了解 hibernate

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

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

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

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

© 2021 V2EX