当前位置:首页 > 天道酬勤 > 正文内容

为什么要使用mybatis(hibernate和spring)

张世龙2021年12月21日 04:11天道酬勤1080

关于SQL和ORM的争论永远都不会结束。 我也一直在考虑这个问题。 昨天又和小组的伙伴进行了讨论,感触还有些。 于是就完成了今天的这篇文章。

声明:本文不会得出Mybatis和JPA两个持久层框架哪个更好的结论。 只是摆事实,讲道理,请不要让官员喷。

一、事件的原因

关于Mybatis和JPA哪个更好,争论已经持续了好几年。 虽然也没有得出结论,但最终每个人的喜好和习惯都有很大不同。 我也看过一些问答,各有各的理由,觉得有道理。 如果叫我不带感情色彩地分辨的话,其实我也很无知。 因为真的是公说公说公理婆讲道理。

在国内,不得不承认,到今年(2019年)为止使用Mybatis的公司确实比使用JPA的公司要多,但到2015年为止使用Hibernate的公司确实也很多。 为什么在国内会发生这种现象呢? 在国外,外国人像往常一样使用JPA吗? 分析一下吧。

二、目前的生态

最近(2018年的JVM生态报告) https://snyk.io/blog/JVM -生态系统-报告2018平台-应用程序/) )中,Mybatis的使用率为可以看到图:

可见,马蒂的比例只是可怜的6%。 大家看到这个统计结果应该会惊讶吧。 不是啊,我的公司和我很多朋友都在用麦蒂啊,好像没听说过使用JPA的人,这个统计结果是错的吧? 给人这样印象的原因也很简单。 因为语言和技术的流行度存在地域性的偏差。 接下来看看谷歌趋势就知道了。

红色部分是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的APP场景中,开发人员需要自动封装,然后将sql查询结果转换为指定的java对象。 这是iBatis阶段,开发人员必须自己定义大量的xml配置,并指定数据库表字段和Java实体类之间的关系。 另外,每个sql都需要在xml中写入适当的语句。 虽然有代码生成器,但是开发量不小。

但是Myb

atis发展到今天,已经非常完美地做好了自动封装数据对象这件事,支持的插件也比较丰富。对于常见的增删改查,也不需要自己写一行代码,这已经无限接近于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大比较

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

最后,我自己是一名从事了多年开发的JAVA老程序员,今年年初我花了一个月整理了一份最适合初学者学习的java干货,可以送给每一位喜欢java的小伙伴,想要获取的可以关注我的头条号并在后台私信我:交流,即可免费获取。

扫描二维码推送至手机访问。

版权声明:本文由花开半夏のブログ发布,如需转载请注明出处。

本文链接:https://www.zhangshilong.cn/work/26076.html

分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。