为什么老外不愿意用 MyBatis,而在国内工程师却偏偏热衷?

2024-01-18 12:10

本文主要是介绍为什么老外不愿意用 MyBatis,而在国内工程师却偏偏热衷?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击“开发者技术前线”,选择“星标🔝”

让一部分开发者看到未来

70299224837a4e5867940bfce3886147.png

回复“666”,获取一份技术人专属大礼包  

开发者技术前整理

参考来源:知乎@陈龙

原文链接:http://suo.im/5f4ee4

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

390e2bb84e4ad406776bc8dd1789a8d6.png

一、国外Mybatis 使用情况

Spring 团队的Josh Long自己在Twitter上做了一个调查。1625次投票,样本量不算大,但也能说明问题。和我答案最后的那些调查图表基本一致。

e56b968aad6fe551acdcada7782e734f.png

我们看一下Google Trends的数据:

搜索条件是这样的:

4763578b5b823fc820b81e2e094d21c6.png

World Wide:

15af03408f414158cc963262790b2627.png

United States:

5f737d719fe582a2e14d6872a4147209.png

France:

55c3be5a5216bdc540b23c7bf16a0862.png

India:

1a0f198361a883563bbc06fbcbc1a9c2.png

Canada:

25ba96c09c5c59b46d20cc42c6469def.png

China:

ff1cd78a37d1a89186a0e9cc207e2c48.png

Japan:

b459e5de53e4ae1a643e33c38b419611.png

其他英文技术网站上的多个统计:

4a2ef3331e84ae9ac3d96b8b13fc1cb6.png

f738522547375906179092f8502fb212.png

再看看Stack Overflow上的问题数:

7b3e7099717a2891266b2afe3426b4b8.png

(含有hibernate的标签和问题数)

2cfcd1fa40a319079033fc219da95530.png

(含有mybatis的标签和问题数)

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

8fbdea747808d82d86f162c530435f2a.png

10605a48ef39b781a100a8ddf6c993a7.png

二、国人喜欢 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 的内涵了吗?不优雅好吧。

a87eca4b93e0438e783f4d93c242a144.png

三、老外不喜欢Mybatis 的原因

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,那只能死掉了。

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

b740b3bbd523090eb9536795cc5e243a.png

四、作者个人的观点

其实十年前我们主要使用的ORM框架就是iBatis,而阿里巴巴是对国内Java开发者影响最大的一家公司。阿里在国内Java社区的影响力有目共睹,这个大家应该都能感受到, 阿里对Java社区贡献了很多实用的开源工具,并且国内Java开发者对于阿里开源的产品接纳程度也最高。

而且早期阿里系离职工程师的影响力也不可小觑,这些从阿里离职的工程师进入了各个规模的公司, 通常也有担任较高的职位, 拥有着相对较多的话语权, 在新公司继续使用自己熟悉的iBatis就是再正常不过的了。

MyBatis封装较少,提供的切入点较多,适合进行架构。遇到超级复杂的场景的时候有不错的sql支持。曾经JPA适合做增删改,mybatis只擅长查询,但是现在的tk.mybatis已经补上了这一块短板,而JPA的依然没有补上他的查询短板。在复杂情况下需要在代码里嵌入大量sql片段或手动用代码拼装sql,但是老实说,都到这份上了,写sql不是还更快一点?因此,做企业级应用时,如果组内Hibernate会的人多,可以考虑用这个,但是依然会埋下一个性能的坑。做互联网级应用时,建议还是用Mybatis吧。

综合考虑,Mybatis的优点是简单高效,优化起来也方便,比较符合现在的开发节奏,现在的互联网公司都是先快速开发占领市场,然后再优化代码。而且这个过程需求经常是变来变去的,开发人员也有流动性,这种情况下用Mybatis显然更加适合。

— 完 —
点这里👇关注我,记得标星呀~
前线推出学习交流一定要备注:研究/工作方向+地点+学校/公司+昵称(如JAVA+上海
扫码加小编微信,进群和大佬们零距离

END

后台回复“电子书” “资料” 领取一份干货,数百面试手册等

历史推荐

某科技公司领导很赤裸裸:“ 80 后该退出 IT 行业”  !工作群里爆粗口,直接@员工滚

Flutter 毁了客户端和 Web 开发!

Java 17,有史以来速度最快 JDK!

好文点个在看吧!

这篇关于为什么老外不愿意用 MyBatis,而在国内工程师却偏偏热衷?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/618941

相关文章

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

mybatis-plus如何根据任意字段saveOrUpdateBatch

《mybatis-plus如何根据任意字段saveOrUpdateBatch》MyBatisPlussaveOrUpdateBatch默认按主键判断操作类型,若需按其他唯一字段(如agentId、pe... 目录使用场景方法源码方法改造首先在service层定义接口service层接口实现总结使用场景my

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

MyBatis-Plus 与 Spring Boot 集成原理实战示例

《MyBatis-Plus与SpringBoot集成原理实战示例》MyBatis-Plus通过自动配置与核心组件集成SpringBoot实现零配置,提供分页、逻辑删除等插件化功能,增强MyBa... 目录 一、MyBATis-Plus 简介 二、集成方式(Spring Boot)1. 引入依赖 三、核心机制

Conda国内镜像源及配置过程

《Conda国内镜像源及配置过程》文章介绍Conda镜像源使用方法,涵盖临时指定单个/多个源、永久配置及恢复默认设置,同时说明main(官方稳定)、free(逐渐弃用)、conda-forge(社区更... 目录一、Conda国内镜像源二、Conda临时使用镜像源指定单个源临时指定多个源创建环境时临时指定源

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

Mybatis-Plus 3.5.12 分页拦截器消失的问题及快速解决方法

《Mybatis-Plus3.5.12分页拦截器消失的问题及快速解决方法》作为Java开发者,我们都爱用Mybatis-Plus简化CRUD操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询... 目录一、问题场景:分页拦截器突然 “失踪”二、问题根源:依赖拆分惹的祸三、解决办法:添加扩展依赖四、分页