前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?

为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?

作者头像
全栈程序员站长
发布于 2022-11-01 08:02:14
发布于 2022-11-01 08:02:14
1.3K0
举报

关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。

声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。

一、事件起因

关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看过知乎上一些问答,各有各的理由,感觉都挺有道理。如果让我不带感情色彩地去分辨,其实我也是懵的,因为真的是公说公有理婆说婆有理。

而在国内,不得不承认,到今年(2019年),用Mybatis的公司确实是要比用JPA的多,但是在2015年以前,用Hibernate的公司确实也是很多的。为什么在国内,会有这样的现象发生?而在国外,老外会一如既往地使用JPA呢?我们来分析分析。

二、目前生态

在最近(2018)的JVM生态报告中(https://snyk.io/blog/jvm-ecosystem-report-2018-platform-application/),Mybatis是使用率是很低的。可以看图:

可以看出,Mybatis的占比只有可怜的6%,大家看到这个统计结果应该会很吃惊,你会觉得,不对啊,我公司以及我很多朋友都在用Mybatis啊,好像没听说过有人用JPA的,这个统计结果是错的吧?造成这种印象的原因也很简单,因为语言和技术的流行度有地域性偏差的,接着来看下Google Trends就明白了:

红色部分是Mybatis的主要使用人群。

图违规,删除了。

再从下面这个对比来看,MyBatis的关注主要集中在中日韩。知道日韩为啥也高吗,猜中有奖哦,哈哈!

首先,必须指出,对于青年程序员,其实都会质疑这个图的可信度。中老年程序员都在感叹国外其实更注重开发效率和面向对象的分析和设计。但我可以非常负责任地告诉你,这图是真的。那么,造成这种现象的原因是?

三、国人喜欢Mybatis的原因

总结起来,有如下原因:

1.大厂带节奏

国内做互联网的Java程序很多都是拷贝阿里的,阿里一开始用例iBatis(日本韩国是怎么回事呢)。大量的老系统都是基于iBatis/MyBatis的,市场上对MyBatis熟悉的人才更多,招聘和培训更容易,有的青年程序员以为“MyBatis早已统一全球了”就是一个很好的证明。

2.简单,学习成本低

小公司需要大量入门级的程序员,像大神甚至一个都请不起,请问大神们那些牛b框架哪个更快让菜鸟们上手,降低公司学习成本。注意这个成本会一直跟随公司,想必大神们创业直接前后端分离了,毕竟钱嘛多的是。

3.对于复杂性需求的灵活性高

国内绝大部分项目都是面向表结构编程的,把java对象仅当成数据容器,查询和模型变更都设计在一张表上,所谓业务逻辑就是一堆增删改查的sql集合,当然用mybatis方便。在逻辑不复杂,或者你判断软件生命周期不会超过一年的时候,直接用表结构编程是最方便快捷的。

国内普遍都是分布式,流量和性能决定了需要经常进行优化,而是用Mybatis对复杂需求的优化很方便。

4.政治环境

国内好多项目都是应付领导的某些奇葩需求。需要面向领导编程。一大半时间其实都是在解决领导的需求。国内项目需要大量报表统计(看看帆软卖的这么好就知道了),需要提供给领导作为决策。看到这里,各位领导不要骂我 ,真的不是黑领导的。

5.Hibernate学习成本高

虽然,实际上SpringDataJPA是非常简单的,但是,但是,JPA/Hibernate后期调试跟踪问题很麻烦,改起来也麻烦。别忘了,牛逼如你的人全公司甚至一个都没。还有什么缓存什么Criteria什么Lazy,虽然这些你学了也不见得能用上,但一个框架,你不学还是不行的。而且,JPA对于增删改很方便,复杂查询却是软肋,有同学会说,JPA也能写SQL语句啊,我想说的是,既然都用orm了,你再写sql,那不就失去了oop的内涵了吗?不优雅好吧。

四、老外喜欢JPA的原因

1.很多老外对Mybatis的认知还停留在iBatis阶段

实际上在Mybatis的应用场景里面,开发者要的就是自动封装,把sql查询结果转化为指定的java对象。这个在iBatis阶段,需要开发者自己定义大量的xml配置,去指定数据库表字段与Java实体类之间的关系。并且,对于每一条sql,都需要在xml中写相应的语句,虽然有代码生成器,带开发量还是不小的。

但Mybatis发展到今天,已经非常完美地做好了自动封装数据对象这件事,支持的插件也比较丰富。对于常见的增删改查,也不需要自己写一行代码,这已经无限接近于Hibernate的能力了。

2.喜欢OOP、DDD,认为写SQL不优雅

用jpa的核心是让我们关注对象建模,而不是关心底层数据库映射。只有你在考虑数据和行为在一起的充血模型、贴身职责,聚合根状态变迁,值对象不变性的情况下,你才会发现jpa给你提供了很多便利,根本不需要关注底层存储模型。

在复杂的逻辑、超长的软件生命周期。使用DDD的设计方法是目前看比较合理的选择,维护的成本比较低。

DDD全称是(Domain-Driven Design)这是2004年就出来的理论,复杂逻辑的应对之道。DDD大会在欧洲等地办了一届又一届,CQRS、Event Sourcing等探索层出不穷,这也是为什么国外比较流行JPA原因。

不过,国内主要是随着这两年随着微服务火爆也有人谈起来DDD了。

但其实DDD也不是银弹,需要大拿能把控全局,国内缺的就是这种大拿,搬砖的太多。

3.有些老外在技术选型时,不会考虑除Spring这种知名框架外的其他技术

无他,唯手熟尔。国外一个项目,做了几年十几年都是很正常的。我以前接触过一个巴基斯坦的电商项目,做了十几年,也跑的好好的,这就是证据。

使用技术也是有惯性的。

4.数据体量和种类没有达到

个人感觉,也咨询了国际友人。老外的项目,在数据体量和种类上完全达不到国内的水平。所以,他们对于性能上的渴求度没有那么高。追求的是稳定,可维护性好。国内一个双11,如果用hibernate,那只能死掉了。

也说明,老外的需求主要是在业务上,技术层面较少考虑。

五、一点感悟

整个状况,和对OOAD的重视有很大关系,我在做DDD技术落地的时候,用MyBatis非常蹩脚,用JPA/Hibernate会好很多。

JPA/Hibernate比较复杂,团队中要有人Hold住它,否则及其容易踩坑;另外,真要使用,建议使用它的一个功能子集,不要所有功能都用。也可以尝试使用更简单EBean ORM。

JPA/Hibernate对分库分表的支持有一下坑。虽然,使用Shareding-JDBC或MyCat等技术,可以不关心分库分表,但是,JPA/Hibernate在某些情况下(比如加载子集合的时候)可能会不带分区键。国外分库分表的少,国内几乎是标配。

六、Mybatis和JPA大比较

最后,从多维度对这两个知名框架做些比较:

最后的最后,欢迎在评论区留下你最宝贵的意见 ,勿喷哦!

参考资料:

  1. https://www.zhihu.com/question/50729231/answer/549761974

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179807.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
为啥国人喜欢Mybatis,而老外偏爱 Hibernate/JPA 呢?
关于SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。
Java技术栈
2020/03/05
5.6K0
为什么老外不愿意用 MyBatis,而在国内工程师却偏偏热衷?
本文不会下关于 Mybatis 和 HIB两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位读者勿喷。
开发者技术前线
2021/10/08
1.9K0
持久层框架JPA与Mybatis该如何选型
目前java 持久层ORM框架应用最广泛的就是JPA和Mybatis。JPA只是一个ORM框架的规范, 对该规范的实现比较完整就是Spring Data JPA(底层基于Hibernate实现),是基于Spring的数据持久层框架,也就是说它只能用在Spring环境内。Mybatis也是一个优秀的数据持久层框架,能比较好的支持ORM实体关系映射、动态SQL等。
字母哥博客
2020/09/23
2.3K0
持久层框架JPA与Mybatis该如何选型
思考:为啥Go里没有类似MyBatis支持XML配置SQL的框架
前阵子团队里有人提到了类似的问题,我自己先是顺手找了一圈,结果只找到了:github.com/xormplus/xo…。这个框架是基于xorm做的加强,但是在2020年就不维护了。显得很奇怪,明明是唯一一个支持了XML配置SQL的库,后面竟然凉了。
泊浮目
2024/04/23
4320
为什么老外不愿意用MyBatis?
Spring 团队的Josh Long自己在Twitter上做了一个调查。1625次投票,样本量不算大,但也能说明问题。和我答案最后的那些调查图表基本一致。
开发者技术前线
2020/11/23
8710
为什么老外不愿意用MyBatis?
为什么老外不愿意用MyBatis?
Spring 团队的Josh Long自己在Twitter上做了一个调查。1625次投票,样本量不算大,但也能说明问题。和我答案最后的那些调查图表基本一致。
好好学java
2019/07/29
8440
为什么老外不愿意用MyBatis?
为什么老外都不愿意用MyBatis?
本文选自知乎问答「为什么国内流行mybatis,国外反而多用hibernate?」
Java技术栈
2019/07/19
1.3K0
为什么老外都不愿意用MyBatis?
为什么老外不愿意用MyBatis?
Spring 团队的Josh Long自己在Twitter上做了一个调查。1625次投票,样本量不算大,但也能说明问题。和我答案最后的那些调查图表基本一致。
用户5224393
2019/08/20
6810
为什么老外不愿意用MyBatis?
一、MyBatis简介:MyBatis历史、MyBatis特性、和其它持久化层技术对比、Mybatis下载依赖包流程
MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁
刘大猫
2025/03/10
2040
Spring Data JPA 与 MyBatis 对比,你喜欢用哪个?
Spring Data JPA是Spring Data的子模块。使用Spring Data,使得基于“repositories”概念的JPA实现更简单和容易。Spring Data JPA的目标是大大简化数据访问层代码的编码。
良月柒
2021/08/09
2K0
hibernate和mybatisplus区别_Mybatis框架
我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加得心应手。
全栈程序员站长
2022/09/30
2.1K0
MyBatis要不要学?京东内部的这份MyBatis文档真香!
很多人说 mybatis重不重要?这里再说下,互联网公司基本都是用mybatis做为持久层框架的,所以mybatis是一定要学的。
程序员追风
2020/11/30
7140
MyBatis要不要学?京东内部的这份MyBatis文档真香!
Spring-Data-JPA尝鲜:快速搭建CRUD+分页后台实例
JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,TopLink,JDO等ORM框架各自为营的局面。值得注意的是,JPA是在充分吸收了现有Hibernate,TopLink,JDO等ORM框架的基础上发展而来的,具有易于使用,伸缩性强等优点。从目前的开发社区的反应上看,JPA受到了极大的支持和赞扬,其中就包括了Spring与EJB3.0的开发团队。
我没有三颗心脏
2019/02/14
1.7K0
Spring-Data-JPA尝鲜:快速搭建CRUD+分页后台实例
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day11】 —— MyBatis1
  本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识、集合容器、并发编程、JVM、Spring全家桶、MyBatis等ORMapping框架、MySQL数据库、Redis缓存、RabbitMQ消息队列、Linux操作技巧等。
陈哈哈
2021/10/13
1.3K0
另一种思考:为什么不选JPA、MyBatis,而选择JDBCTemplate?
对于关系型数据库的操作,我们在之前的Spring Boot系列教程中已经介绍了几个最常用的使用案例: 使用JdbcTemplate访问MySQL数据库 使用Spring Data JPA访问MySQL 使用MyBatis访问MySQL 因为选择多,因此对于这几种方式哪个更好,一直也是Java开发者们争论的一个热点。同时,一直以来争论的热点一直围绕着MyBatis和Spring Data JPA的选择(之前我们也聊了关于 MyBatis和Spring Data JPA的选择问题)。 今天小编看到一篇比较
程序猿DD
2023/04/04
2.9K0
另一种思考:为什么不选JPA、MyBatis,而选择JDBCTemplate?
jpa实现增删改查_hibernate入门案例
ORM(Object Relational Mapping),对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
全栈程序员站长
2022/11/01
2.1K0
jpa实现增删改查_hibernate入门案例
Hibernate与Mybatis的区别优缺点对比
我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加得心应手。
Java周某人
2019/08/01
10.7K0
Hibernate与Mybatis的区别优缺点对比
为什么老外不愿意用 MyBatis?
Spring 团队的Josh Long自己在Twitter上做了一个调查。1625次投票,样本量不算大,但也能说明问题。和我答案最后的那些调查图表基本一致。
良月柒
2019/09/04
5200
为什么老外不愿意用 MyBatis?
为什么使用mybatis
在Mybatis出现以前,乃至于与mybatis相似的框架出现以前,我们是怎么连接数据库的? 依靠JDBC 而传统的JDBC连接数据库,大致是以下代码:
向着百万年薪努力的小赵
2022/12/02
5080
为什么使用mybatis
比MyBatis快100倍,天生支持联表!
点击上方蓝色字体,选择“设为星标” 回复”学习资料“获取学习宝典 文章来源:https://c1n.cn/my8R6 目录 简介 开源协议 界面展示 功能概述 技术选型 源码地址 简介 对于 Java 程序员来说,MyBatis、Hibernate 等都是常见的 ORM 框架,对于一些简单的 CRUD,事务支持非常不错。 但是有时候用起来可能比较繁琐,最近看到一个新的类似 ORM 的框架,具备了 ORM 框架的功能,同时也还有一点 GraphQL 语法的味道。 比 MyBatis 效率快 100 倍的
猿天地
2022/05/27
1.1K0
比MyBatis快100倍,天生支持联表!
推荐阅读
相关推荐
为啥国人喜欢Mybatis,而老外偏爱 Hibernate/JPA 呢?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档