如何学习MyBatis
618将至,对各大电商平台又是一大考验。面对618、双11流量洪峰,阿里京东都用了哪些技术?今天我们聊聊阿里的持久层选择。
众所周知,阿里巴巴的持久层选择了MyBatis框架。
但是根据JVM生态系统报告,在ORM框架中使用MyBatis的占比仅有6%!大量国外企业和开发者,更倾向于使用Hibernate。MyBatis似乎只在国内流行?
ORM使用状况
相信很多人都用过hibernate,你觉得它与MyBatis哪个更优秀呢?
阿里巴巴的持久层为什么选择MyBatis?如果换成hibernate,能否扛住618、双11?
关于这些疑问,也和很多同事讨论过,最后还是阿里的一位大神给出了答案:
1、阿里在mysql上下了大功夫,对数据查询的要求也比较高,很多sql查询都要精心设计;
2、阿里这种scale的网站服务,对cache的依赖是非常大的,对cache逻辑的要求非常高,而且一定要具体问题,具体优化。hibernate自带的cache并不能满足像阿里这样的公司的需求;
3、hibernate在你项目开始时候省事,但是会导致业务逻辑模型和数据库模型互相依赖的程度太高,一旦项目变迁,随便改一处数据库的schema,整个java项目可能要改几十处!而MyBatis的自动mapping做的也不差,开发起来也没多花多少时间。等项目进入中后期,你需要大量定制和优化查询的时候,MyBatis的开发效率就胜出了。
4、很多地方Hibernate可以强大到只用一行代码解决很多问题,但比如说一个update()或者save()到底做了什么,这里既有hibernate本身的逻辑,也有你应用的逻辑,如果这一行产生了问题,你该如何去做?而MyBatis的开发和调优更加方便简单。
阿里如果用hibernate,平时还好,赶上618、双十一这种大促,那只有死路一条了。
所以阿里巴巴的持久层抛弃hibernate,采用了MyBatis框架。
Mybatis简单高效, 学习成本低,很少增加工作量;架构来说功能单一,场景明确,耦合度低,无状态,面向sql 语句的,便于在业务代码里分布式部署,优化起来也方便,非常符合现在的开发节奏。
MyBatis学习路线
但是很多工作3、5年的程序员,对于MyBatis的诸多妙用依然一知半解。MyBatis其实学习起来不难,但是自行学习的话很容易遇到各种问题,比如导入MyBatis源码时报错;一对多查询时,只查询到一条或部分数据等…
这5个MyBatis经典面试题,你能答上来几个?
1.MyBatis源码中用了哪些设计模式?为什么要用这些设计模式?
2.日志级别设置为Debug之后,在控制台能打印访问数据库的sql语句等信息,在Mybatis中这是怎么实现的?实现过程中使用了什么设计模式?
3.MyBatis是如何为二级缓存动态添加日志、同步控制、阻塞、缓存淘汰策略等附加能力的?用了什么设计模式?
4.请描述从数据库连接池获取一个数据连接的过程;
5.什么是缓存雪崩?如何解决?