回答一:

作者:Java架构师
链接:https://www.zhihu.com/question/50729231/answer/625854112
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

近期很多技术论坛都在热议:为什么MyBatis在国内非常流行,而国外好像无人问津?那我就说说自己的看法吧。从下图我们可以非常直观地看出,在最近的JVM生态报告中,Mybatis的确不高。

 

 

但是在国内为什么MyBatis如此之流行?我认为有以下几个原因:

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

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

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

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

喜欢的本回答的点个赞给个关注呗!

 

 

 

回答二:

作者:飞书Joe
链接:https://www.zhihu.com/question/50729231/answer/563844811
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

看了半天没一个回答在点子上。国内mybatis流行的原因就在于绝大部分项目都是面向表结构编程的,把java对象仅当成数据容器,查询和模型变更都设计在一张表上,所谓业务逻辑就是一堆增删改查的sql集合,那当然用mybatis方便啊,要我看如果数据库存储过程能提供rest接口,连用java都是脱裤子放屁,直接前端js调存储过程好了。

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

-------更新分隔线

并不是说面向表结构编程不好,在逻辑不复杂,或者你判断软件生命周期不会超过一年的时候,直接用表结构编程是最方便快捷的。但是在复杂的逻辑、超长的软件生命周期。使用DDD的设计方法是目前看比较合理的选择,维护的成本比较低。DDD全称是(Domain-Driven Design)这是2004年就出来的理论,复杂逻辑的应对之道。DDD大会在欧洲等地办了一届又一届,CQRS、Event Sourcing等探索层出不穷,这也是为什么国外比较流行JPA原因。国内主要是随着这两年随着微服务火爆也有人谈起来DDD了。具体看我的这篇 SOA和微服务架构的区别? 使用DDD+微服务的例子 参考这里 有哪些使用Spring Cloud的完整微服务项目?

JPA对DDD的支持,请看这里 https://www.cnkirito.moe/jpa-ddd/

很多人在谈用了JPA不支持复杂查询。实际上大部分情况下查询需求(给用户展现什么)和业务逻辑(主要是对模型的修改和创建限制以及派生出来的逻辑)是两个不同的领域,我一直是坚持用CQRS的方式来处理复杂查询和业务建模两种不同的模型。你可以认为查询是非模型化的,所以用视图view,复杂的join sql甚至nosql(es/mongo)都可以。 CQRS参考Martin Flower的博客 bliki: EagerReadDerivation

另外有人说用DDD性能不好,我只能表示呵呵

 

 

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐