老外用MyBatis吗

昨天我在我在知乎看到了一张比较Hibernate和MyBatis使用情况的图,顺手发了条朋友圈:

Hibernate vs MyBatis ,谁能告诉我什么样的国情导致了这么大的差异?

结果有人质疑,有人感叹。

我开始没有想到会有人质疑这个结果,在我的直觉里,确实国外使用MyBatis的人很少(在国外的网站上很少看到MyBatis的文章,但JPA/Hibernate的文章经常看到)。所以今天早上我用google的trends验证了一下,上面的以及下面的这些比较图,都可以访问 https://trends.google.com/trends/explore?q=%2Fm%2F04t80p,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早已统一全球了”就是一个很好的证明。

原文地址:https://www.jianshu.com/p/654f387cd865

国内程序员的十大疑问之一:为什么老外不愿意用MyBatis?的更多相关文章

  1. java 书籍推荐 JavaEE程序员必读图书大推荐

    java 书籍推荐 JavaEE程序员必读图书大推荐 转自:http://www.cnblogs.com/xlwmin/articles/2192775.html 下面是我根据多年的阅读和实践经验,给 ...

  2. 提高ASP.NET应用程序性能的十大方法

    一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的 ...

  3. JavaEE程序员必读图书大推荐

    下面是我根据多年的阅读和实践经验,给您推荐的一些图书: 第一部分: Java语言篇 1 <Java编程规范> 星级: 适合对象:初级,中级 介绍:作者James Gosling(Java之 ...

  4. 提高Asp.Net应用程序性能的十大方法(译感)

    译完了提高Asp.Net应用程序的十大方法这篇文章,仔细想其中提到的每一条,在这里结合我的项目来谈谈.第一条:返回多个结果集因为我的项目中所有对数据库的访问的sql语句都是通过调用存储过程实现的,所以 ...

  5. [转]成为优秀Java程序员的10大技巧

    转自:http://www.codeceo.com/article/10-good-java-programmer-tips.html Java程序员有许多应遵循的守则或最佳实践方式.本文概述了每个开 ...

  6. 盘点国内程序员不常用的热门iOS第三方库:看完,还敢自称”精通iOS开发”吗?【转载】

    综合github上各个项目的关注度与具体使用情况,涵盖功能,UI,数据库,自动化测试,编程工具等类型,看完,还敢自称”精通iOS开发”吗? https://github.com/syedhali/EZ ...

  7. 【同行说技术】Python程序员小白变大神必读资料汇总( 三)

    在文章<Python开发.调试.爬虫类工具大全>里面向大家总结了各种实用工具和爬虫技术,今天小编收集了5篇带有实例干货的资料,赶紧来看看吧!另外,喜欢写博客的博主可以申请加工程师博主交流群 ...

  8. 盘点国内程序员不常用的热门iOS第三方库

    https://github.com/syedhali/EZAudio 基于核心音频,有助于进行实时,低延迟音频处理和可视化的iOS和OSX音频可视化框架. https://github.com/ba ...

  9. Java 程序员们值得一看的好书推荐

    "学习的最好途径就是看书",这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一 ...

随机推荐

  1. windows系统下如何正确安装Cygwin(图文详解)

    我的操作系统信息是 1.在官网https://cygwin.com/install.html下载win64位安装包 选择包的下载存放目录,点击“下一步”   为了使我们安装的Cygwin能够编译程序, ...

  2. [POJ1509]Glass Beads 后缀自动机 最小循环串

    题目链接:http://poj.org/problem?id=1509 题目意思就是求循环字符串的最小表示. 我们用字符串S+S建立SAM,然后从root开始走n步,每次尽量选最小的. 由于 SAM ...

  3. oracle 时间格式转化以及计算

    --A表中的日期字段 create_date   例如:2017-08-05  转化为2017年8月5日   oracle 在这里的双引号会忽略 select to_char(to_date(tt.c ...

  4. idea下关联spark源码环境(转)

    0.环境: java 1.8 scala 2.11.8 maven 3.5.0 idea 2017 spark 2.2.0 1完成以下配置 java环境变量 scala环境变量 maven setti ...

  5. Petri网的工具

    需要寻找 Petri 网的工具的朋友可以在 http://www.informatik.uni-hamburg.de/TGI/PetriNets/tools/complete_db.html 里面找一 ...

  6. 比较 String,StringBuffer,StringBuilder

    1)三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String 2)String <(StringBuffer,StringBuild ...

  7. ALTER LANGUAGE - 修改一个过程语言的定义

    SYNOPSIS ALTER LANGUAGE name RENAME TO newname DESCRIPTION 描述 ALTER LANGUAGE 修改一门语言的定义. 目前唯一的功能就是重命名 ...

  8. Win10上 visual studio设置为本地IIS运行网站时 必须以管理员身份加载项目的解决方法

    右键,选择“兼容性疑难解答”. 选择“疑难解答程序” 选择“该程序需要附加权限” 点击测试程序 点击下一步 选择 是,为此程序保存这些设置

  9. 【C语言】控制台窗口图形界面编程(四):文本输出

    目录 00. 目录 01. FillConsoleOutputAttribute函数 02. FillConsoleOutputCharacter函数 03. WriteConsoleOutputCh ...

  10. android-async-http框架库使用基础

    开源项目链接 android-async-http仓库:git clone https://github.com/loopj/android-async-http android-async-http ...