老外用 MyBatis 吗
昨天我在我在知乎看到了一张比较 Hibernate 和 MyBatis 使用情况的图, 顺手发了条朋友圈:
Hibernate vs MyBatis , 谁能告诉我什么样的国情导致了这么大的差异?
结果有人质疑, 有人感叹.
我开始没有想到会有人质疑这个结果, 在我的直觉里, 确实国外使用 MyBatis 的人很少(在国外的网站上很少看到 MyBatis 的文章, 但 JPA/Hibernate 的文章经常看到). 所以今天早上我用 google 的 trends 验证了一下, 上面的以及下面的这些比较图, 都可以访问 https://trends.google.com/trends/explore?q=/m/04t80p,MyBatis 来看到.
从下面这个对比来看, MyBatis 的关注主要集中在中日韩.
从全球的的比例来看, 是这样的:
上面是基于 google 查询的数据计算出来的, 如果基于 YouTube, 那结果是这样的:
从以上的结果来看, 在国外, 准确地说, 在中日韩之外的大部分地区, JPA/Hibernate 完胜 MyBatis, 但在国内却完全相反, But Why?
老外为什么不用 MyBatis?
为什么会这样呢? 我也不知道. 一些朋友发表了自己的想法:
回复基本上分两种:
青年程序员都在质疑这个图的可信度
中老年程序员都在感叹国外其实更注重开发效率和面向对象的分析和设计
有个朋友说的非常好:
窃以为, 唯独神州大量使用 Mybatis, 主要看重它不强化业务建模地搞表.
造成的后果是, 宁可自己写 SQL 也不意义花力气使用 OOAD 思维方式梳理业务并建模.
而 hibernate 是 OOAD 建模后的自然延伸
好吧, 下面是我个人的观点:
确实, 和对 OOAD 的重视有关, 我在做 DDD 战术落地的时候, 用 MyBatis 非常蹩脚, 用 JPA/Hibernate 会好很多.
JPA/Hibernate 比较复杂, 团队中要有人 Hold 住它, 否则及其容易踩坑; 另外, 真要使用, 建议使用它的一个功能子集, 不要所有功能都用. 也可以尝试使用更简单 EBean ORM.
JPA/Hibernate 对分库分表的支持有一下坑. 虽然, 使用 Shareding-JDBC 或 MyCat 等技术, 可以不关心分库分表, 但是, JPA/Hibernate 在某些情况下 (比如加载子集合的时候) 可能会不带分区键. 国外分库分表的少, 国内几乎是标配.
国内做互联网的 Java 程序很多都是拷贝阿里的, 阿里一开始用例 iBatis(日本韩国是怎么回事呢). 大量的老系统都是基于 iBatis/MyBatis 的, 市场上对 MyBatis 熟悉的人才更多, 招聘和培训更容易, 有的青年程序员以为 "MyBatis 早已统一全球了" 就是一个很好的证明.
还有别的原因吗? 大家可以补充.
题图是今天早上开车上班等红绿灯时照的, 感觉这些天天气不太冷了, 看到月亮辣么园, 才知道是腊月十六了, 要过年了, 写了一首小诗:
码中无昼夜
寒尽知年终
五更驱车马
灯月两不分
你能找到图中的月亮吗? 提前祝大家新春快乐, 诸事如意.
「小得」是把日常工作中, 学习中一些小的技术收获记录下来, 目标是写满 900 篇. 这是第 2 篇.
长按 2 秒, 识别二维码, 关注我
来源: http://www.tuicool.com/articles/IfEZNvM