分享

阿里为什么弃用hibernate?看完Mybatis源码我黯然流泪了。

 昵称QvKmxOqV 2019-12-03
MyBatis和hibernate谁优谁劣?一直都有争论,这不,前几天群里关于这个话题,又吵起来了。

众多过来人总结出来的经验就是:hibernate确实厉害,但MyBatis学习成本低,使用简单,能达到目的,不增加额外工作量(或很少增加),架构来说MyBatis功能单一,场景明确,耦合度低,无状态,便于(放在业务代码里)分布式部署。所以在大多数场景里,MyBatis更适合。

为什么阿里巴巴的持久层抛弃hibernate,采用MyBatis框架?

原因大概有以下4点:
1、阿里在mysql上下了大功夫,他们对数据查询的要求也比较高,很多sql查询都要精心设计。而hibernate把数据库和你隔离了,如果使用hibernate,虽然能对生成的查询进行一定程度的定制,但开发起来付出的代价更大。
2、对于阿里这种规模的网站服务,对cache的依赖是非常大的,对cache逻辑的要求非常高,而且一定要具体问题,具体优化。hibernate自带的cache并不能满足像阿里这样的公司的需求。
3、hibernate在你项目开始时候省事,但是会导致业务逻辑模型和数据库模型互相依赖的程度太高,一旦项目变迁,随便改一处数据库的schema,整个java项目可能要改几十处!而MyBatis的自动mapping做的也不差,开发起来也没多花多少时间。等项目进入中后期,你需要大量定制和优化查询的时候,MyBatis的开发效率就胜出了。

4、很多地方Hibernate可以强大到只用一行代码解决很多问题,但比如说一个update()或者save()到底做了什么,这里既有hibernate本身的逻辑,也有你应用的逻辑,如果这一行产生了问题,你该如何去做?而MyBatis的开发和调优更加方便简单。

尤其是需要处理大量数据或者大并发情况的网站服务,这也阿里选择MyBatis的原因。

MyBatis整体架构

大厂都在用MyBatis,跳槽的时候MyBatis更是面试必问的内容,那你对于MyBatis又掌握了多少呢?下面这5道阿里关于MyBatis的面试题,你能答上来几道?

1、源码中用了哪些设计模式?为什么要用这些设计模式?

2、MyBatis打开调试模式之后,能打印sql语句等信息,这是怎么实现的?实现过程中使用了什么设计模式?

3、MyBatis是如何为二级缓存动态添加日志、同步控制、阻塞、缓存淘汰策略等附加能力的?用了什么设计模式?

4、请描述从数据库连接池获取一个数据连接的过程;

5、什么是缓存雪崩?如何解决?

如果这5道题你能答上来,至少在面试阿里等大厂时,你已经超越了80%的竞争对手。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多