V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gz911122
V2EX  ›  Java

为什么感觉国内比较流行的 mybatis 在国外好像没人用的样子?

  •  1
     
  •   gz911122 · 2018-12-16 21:46:31 +08:00 · 24116 次点击
    这是一个创建于 2168 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是什么造成的这个现象啊。
    而且感觉国内 java 界在 github 上也不是很活跃?
    没找到多少有趣的项目 or 工具。
    90 条回复    2019-03-30 22:58:23 +08:00
    gz911122
        1
    gz911122  
    OP
       2018-12-16 21:47:28 +08:00
    问了几个朋友都表示不会使用除 spring 这种知名框架外的开源项目。
    理由的后端要负责。。
    但是也没见 nodeJs 之类的这么保守啊
    Mogugugugu
        2
    Mogugugugu  
       2018-12-16 21:53:04 +08:00 via Android
    Java 混了这么多年不就是保守么。。。虽然也有创新,但是企业开发,用了什么新框架,小众框架,要重新踩坑不说,开发人员离职了谁来扛旗谁来接锅,这也就是为啥企业喜欢成熟的大众化的,开发效率 性能固然重要,但是还是要看长远的。
    Mogugugugu
        3
    Mogugugugu  
       2018-12-16 21:57:23 +08:00 via Android
    mybatis 没人用?用啥? jpa ? hibernate ?还是那个 jooq ?可选择性也不多,Spring 全家桶就爱选 jpa,简单点可能会选 mybatis,入门简单,维护简单,坑也被踩得差不多了,hibernate 太重, 入门要求太高,用精了更难,新人来了不好接锅。。。
    gz911122
        4
    gz911122  
    OP
       2018-12-16 22:00:49 +08:00
    gz911122
        5
    gz911122  
    OP
       2018-12-16 22:01:49 +08:00
    @Mogugugugu
    说的这些原因都能理解
    就是不能理解的是为啥国内外差别这么大
    国内 mybatis 几乎是首选,而国外完全没人用 几乎
    ericls
        6
    ericls  
       2018-12-16 22:08:46 +08:00 via iPhone
    @gz911122 因为国内有自己的圈子 当一个圈子人数够多的时候 是不需要接入其他圈子的
    Sharuru
        7
    Sharuru  
       2018-12-16 22:11:22 +08:00   ❤️ 3
    国内技术圈流行的东西和国外是有一定代差的。

    就拿 Spring Boot 来说,注解配置都出来多久了,国内现在起手还是一个 xml 教你配置。
    一方面语言是一种因素,另一方面我觉得百度上能搜到的教程都是屎;导致整体水准上不去。

    其实 Hibernate 现在配合 Spring Data 足够易用了,简单需求可以只靠方法名就生成一堆搜索。

    (然而之前还有帖子在说 ORM 是毒瘤,raw sql 才是王道。)

    楼主既然眼界宽了一点,也就没必要自扰,喜欢一个用就完事儿了。
    echo1937
        8
    echo1937  
       2018-12-16 22:15:13 +08:00 via iPhone   ❤️ 14
    和 pivital 工程师聊过这个问题,对方的回答是,国内很喜欢手写 sql,尤其是复杂的 sql,在这点上老外这个需求就少很多。

    进一步询问,这些 sql 都是干啥的,p 厂的调研结果是,给领导提供数据啊报表之类的需求多,业务需求相关其实少。
    HuHui
        9
    HuHui  
       2018-12-16 22:17:28 +08:00 via Android
    业务复杂度决定的吧
    gz911122
        10
    gz911122  
    OP
       2018-12-16 22:23:48 +08:00
    @ericls 有可能
    感觉国内 web 前端是国内外交流还挺丰富的
    android 也还好
    gz911122
        11
    gz911122  
    OP
       2018-12-16 22:24:38 +08:00
    @ericls 求问国内的圈子在哪哎 没找到啊。。 开源中国嘛?
    alcarl
        12
    alcarl  
       2018-12-16 22:27:14 +08:00 via Android
    国外的 java 历史比咱要早个十几年,遗留的东西和人也多,自然对新东西接受的就少一些。中国是从 2005 年左右起,互联网浪潮才开始有大规模的 java 开发,甚至到 2010 年以后才有大批量的新人入行,it 这行是什么新用什么是自然的。其实很久以前国内招 java 的基本全是要熟练 ssh 的,不过最近这些年 struts 基本没人用了,还经常出些大漏洞。hibernate 和 mybatis 相比要写很多框架需要的冗余代码,写小项目的效率不行,不适合雨后春笋般的互联网企业,spring boot 也是为了简化提高搭建效率而生的,很快就流行起来了。
    从主观上说到底其实就一个原因码农天生的懒,懒癌晚期患者。。。。。。。
    gz911122
        13
    gz911122  
    OP
       2018-12-16 22:31:28 +08:00
    @alcarl 我的意思是国外比较新 感觉要新 3 年左右
    daimazha
        14
    daimazha  
       2018-12-16 22:31:49 +08:00
    楼主还是眼界放宽点吧。
    Mybatis 在国外好像没人用? 楼主统计过吗? Mybatis 一直很保持更新,而且 commiter 大部分还都是外国人吧。
    国内 Java 界在 GitHub 上不活跃? 看看 trending 吧, 可能一半都是国内开发者的项目。
    CallMeReznov
        15
    CallMeReznov  
       2018-12-16 22:33:06 +08:00
    @echo1937 有没有专门整合这种临时需求的报表工具或者方式
    领导,或者运营,产品总是对后端数据展示这块设计需求不重视,产品都上线了还是让运维到线上数据库查,查完就拉倒也不跟开发说要加个类似的参数展示.过几天又想看那就又查.
    就不能搞个什么东西给他们 让他们自己查,最好还有一定的自定义的空间
    alcarl
        16
    alcarl  
       2018-12-16 22:39:59 +08:00 via Android
    @gz911122 英语的原因最新的东西都是国外先用,但并没有看起来那么多人用
    sagaxu
        17
    sagaxu  
       2018-12-16 22:50:05 +08:00 via Android   ❤️ 7
    db 访问分为这么几种
    1. 写 sql,各个 db 差异要自己适配
    2. 写 dsl,屏蔽了 db 差异,自动适配
    3. 运行时或编译时自动合成 sql,屏蔽 db 差异

    mybatis 和 jdbc 是第一种,hql 是第二种,jpa 是第三种,开发效率依次递增,表达能力依次递减。在我看来,mybatis 已经是过去式了,jpa 可以满足 80%以上的需求了,少数交给 hql,极少数直接走 jdbc(temple)。
    Narcissu5
        18
    Narcissu5  
       2018-12-16 23:24:42 +08:00
    我觉得还是数据集的原因吧,中国市场太大了,动不动就是百万千万日活的,超过大多数外国全国人口,数据上去了,对手写 sql 的需求就强烈了。面对大数据集的时候基本要求就是每条查询都要有索引,JPA 生成的那坨屎就用不上了
    VEEX6
        19
    VEEX6  
       2018-12-16 23:40:50 +08:00
    前不久我的团队就在用。。。虽然觉得有点土
    MoHen9
        20
    MoHen9  
       2018-12-16 23:47:36 +08:00 via Android
    我同事喜欢用 JdbcTemplate,几乎不用 mybatis,而我喜欢 mybatis 和 jpa,我觉得觉得 mybatis 好用,又是 orm 框架,使用好不用担心 SQL 注入和 null 值等情况,而他们觉得 orm 需要对应实体类,没有原生 SQL 灵活,想怎么拼就怎么拼。
    l00t
        21
    l00t  
       2018-12-17 08:47:15 +08:00
    @Sharuru #7 Hibernate 才是有代差的过时的玩意吧
    szq8014
        22
    szq8014  
       2018-12-17 08:59:25 +08:00   ❤️ 4
    我个人觉得绝大多数的情况下 MyBatis 手写代码没什么优势,也就报表统计时能好一些。
    怀疑用 MyBatis 初心是技术不自信不了解 Hibernate 又想掌握自己写的代码, 后来用烦了就开始写各种 generate 插件,活生生把 MyBastis 魔改成了 Hibernate 又不如 Hibernate。(装完逼就跑
    CoderEQ
        23
    CoderEQ  
       2018-12-17 09:01:20 +08:00 via Android
    我们都在用,结果跟我们公司的国外团队协作开发时,他们说 ibatis 都过时十多年了,然后我就觉得他们可能是有误解,他们用 jpa,hibernate
    echo1937
        24
    echo1937  
       2018-12-17 09:13:16 +08:00
    @szq8014 #22 确实,
    没有 generate 插件,Mybatis 用起来挺烦的;
    有了 generate 插件,Mybatis 多了一堆的 config,明明有使用更简单的 jpa

    所以我这样的懒人,还是 jpa + JdbcTemplate 比较顺手一点。
    chocotan
        25
    chocotan  
       2018-12-17 09:14:11 +08:00
    我也很久前就有这个疑惑了,歪果仁的统计里面 jpa/hibernate 永远是大头
    我自己也是喜欢 jpa,写不需要特殊 sql 的项目简直是神器

    @daimazha 随便发几个我看到的统计
    https://snyk.io/blog/jvm-ecosystem-report-2018-platform-application
    https://arjan-tijms.omnifaces.org/2018/05/java-ee-survey-2018-results.html
    zyj321321321
        26
    zyj321321321  
       2018-12-17 09:16:35 +08:00
    说到底,大家都想安逸一点。对于已有线上产品,平常产品经理给的需求就已经改的很恶心了,再换个自己不会用的,那不就是分分钟加班。只有当换个技术主管的时候,才会可能产生技术换代这样的操作。所以大部分稳定不死的老公司,技术迭代慢。才上班刚半年的渣渣的想法
    arthas2234
        27
    arthas2234  
       2018-12-17 09:20:48 +08:00
    @echo1937 业务需求 jpa 完全可以满足了,就是报表,往往要联合几个表做查询还有复杂的逻辑。报表我一般都是用视图封装起来,jpa 只用来查询封装好的视图
    chinesedragon
        28
    chinesedragon  
       2018-12-17 09:28:45 +08:00
    JPA 联表查询时巨不舒服,有什么解决方法啊
    youngxhui
        29
    youngxhui  
       2018-12-17 09:35:40 +08:00 via Android
    @daimazha 在国外的占有率的确不高,可以说很低。中日韩三国喜欢 mybatis,其他国家喜欢 hibernate

    https://www.zhihu.com/question/50729231/answer/549761974
    gesse
        30
    gesse  
       2018-12-17 09:39:40 +08:00
    用 java 的第一优势是稳定。国外人比较看重稳定吧, 加上人口少, 并发之类的可能考虑的少
    daimazha
        31
    daimazha  
       2018-12-17 09:47:18 +08:00
    @chocotan #24 第一个比较有说服力,第二个样本太少了。Mybatis 更易学易上手同时性能也比 Hibernate 好。在国外比较流行可能是因为 Hibernate 更面向对象,同时对 Mybatis 的 xml 不爽。
    CoderGeek
        32
    CoderGeek  
       2018-12-17 09:49:56 +08:00
    老外写复杂 sql 的少 - -
    specture
        33
    specture  
       2018-12-17 09:53:21 +08:00   ❤️ 1
    @sagaxu 赞同。我现在带的这个项目思路就是类似的。有点参考 CQRS 的意思。核心业务层,增删改 jpa,这一块基本不会有自己写 sql 的需求,如果有,那极有可能设计不合理;报表,页面复杂试图的数据 jdbctemplate 直接撸 SQL。mybatis 其实是相对折衷的方案,都能做但是都不是那么舒服。
    tatelucky
        34
    tatelucky  
       2018-12-17 09:53:54 +08:00
    笑了,没有所谓过时不过时,只有适合不适合
    yjm9898
        35
    yjm9898  
       2018-12-17 09:59:04 +08:00   ❤️ 1
    @gesse #30 并发考虑得少? jdk 中国人写的?
    gejun123456
        36
    gejun123456  
       2018-12-17 09:59:38 +08:00 via iPhone
    堡垒之夜为何在国内不火 一个原因么
    zpf124
        37
    zpf124  
       2018-12-17 10:36:17 +08:00   ❤️ 1
    确实国内外倾向比较不一样。

    Lonely
        38
    Lonely  
       2018-12-17 10:38:34 +08:00 via iPhone
    感觉,感觉……有数据吗
    gz911122
        39
    gz911122  
    OP
       2018-12-17 10:43:07 +08:00
    @Lonely 上面有人贴数据了呀
    zpf124
        40
    zpf124  
       2018-12-17 10:43:29 +08:00
    上面那个是两张图,都是一年内的搜索热度统计,第一张是全球的,第二张是中国的。
    gz911122
        41
    gz911122  
    OP
       2018-12-17 10:44:09 +08:00
    @tatelucky 那么倒是解答下为什么产生这样的差异啊?
    zpf124
        42
    zpf124  
       2018-12-17 10:51:17 +08:00
    然后我又试着搜了一下 14 年至今的趋势。

    全球范围内, 所有的 ORM 相关的内容都是下降趋势的。
    可能是因为 java 的热度也在下滑。原因应该是因为 node 引领的 js 的崛起和深度学习引领的 python。


    而且值得一提的是,中日韩三国都更偏向 Mybatis。当然日本第一倾向居然是 裸写 JDBC。
    zpf124
        43
    zpf124  
       2018-12-17 10:58:47 +08:00
    然后, 中国的搜索趋势就比较诡异了... 图形乱糟糟的像是心电图一样,波动都很大...
    不过总体上,14 年底,mybatis 就领先了。

    我鼠标 hover 出现的那个详情图挡住了一个重要变化,18 年 9 月的时候所有关键字都是热度降低的,但 mybatis 突然降低了一半左右。
    有没有大佬科普一下发生了什么? Google 改变收录算法引起的? 还是国内当时有情况引发的趋势?又或者因为 9 月份开始找工作了,学生党顾不上搜了只剩工作党提供的热度了?

    zhyzhy
        44
    zhyzhy  
       2018-12-17 11:04:50 +08:00
    很好奇大厂的 Hibernate 是怎么用的
    真的配置一堆 OneToOne,ManyToMany 吗?
    我个人使用都是单表,遇到 join 只能放业务层代码里 join 了
    southsala
        45
    southsala  
       2018-12-17 11:37:21 +08:00
    我也好奇大厂 Hibernate 怎么用的,我也是业务层做逻辑关联,但是遇到过电商项目时配置 OneToOne 之类的,不用自己写关联语句,挺省事的
    Lonely
        46
    Lonely  
       2018-12-17 11:49:02 +08:00 via iPhone
    @gz911122 嗯嗯,看到了
    xAx
        47
    xAx  
       2018-12-17 13:00:39 +08:00
    上面这些拿数据说话的,有想过你们列举的数据来源到底对不对吗?

    大家上 google\github 十个有九个是开挂上的,九个里面还有八个要保隐私填非真实信息...

    就搜索热度来说,统计结果仅能代表:坐飞机的程序员 && 被 google 真实定位。

    不坐飞机的程序员 || 没有被 google 真实定位 都被你们当外国人了吗???
    zjsxwc
        48
    zjsxwc  
       2018-12-17 13:09:09 +08:00
    从转 sql 与转 html 来看:

    mybatis 类似与 前端 Vue

    JPA 类似与 前端 React/Angular
    HiJackXD
        49
    HiJackXD  
       2018-12-17 13:15:19 +08:00 via iPhone
    @xAx 但是并不影响统计比例呀 除非能证明用 mybatis 的选手更大概率翻墙。。
    HiJackXD
        50
    HiJackXD  
       2018-12-17 13:25:07 +08:00 via iPhone
    主要原因还是 hibernate 深入太难,不看看文档一不小心就会掉入性能深坑,比如多字段的数据更新,hibernate 的 update 默认是更新所有字段(无论其他字段有没有变)但其实可以配置好只更新有变化的字段。 但是文档主要是英文,国人大部分看起来肯定没外国人流畅。但 mybatis 都是自控 sql,没多少需要注意的坑。大家就这样觉得 hibernate 性能不行, 其实是自己不会用。。
    yhvictor
        51
    yhvictor  
       2018-12-17 13:36:15 +08:00 via iPhone
    楼上各位 如果性能不行为啥不上 nosql ?
    kevinhwang
        52
    kevinhwang  
       2018-12-17 13:39:11 +08:00   ❤️ 3
    其实国内真的大部分是 mybatis,这是工程师素质导致的。
    国内工程师英文比较差,较少读 api doc,遇到和 hibernate 和 jpa 的坑就会很无助。
    而 mybatis 实现简单,直接查看源代码一步一步 debug 也能找出问题( hibernate 试试看)。
    国外的趋势是对的,jpa 提高开发效率非常高。mybatis 和 jpa ( hibernate )都用过。
    mybatis 开发慢,且注解方式非常不优雅,属于落后框架,但维护起来真的舒服。
    hibernate 真的门槛比较高,若在并表的情况下(互联网很少),开发一时爽,维护火葬场。
    个人看法是 hibernate+jdbc。mybatis 真的很落后,都什么年代了还 xml,注解又做不好。
    shyangs
        53
    shyangs  
       2018-12-17 13:43:38 +08:00
    我選 JPA 和 React
    ::doge::
    tatelucky
        54
    tatelucky  
       2018-12-17 13:43:48 +08:00
    @gz911122 小厂无庸置疑,选择现成的轮子比价划算,市面上常用技术你得会,mysql+mybatis 目前成了大多小公司的标配,无论招人还是立项,这个是最节约成本的,好找人,会的人多,资料好找。大厂,能自研,自己也不会对你公开,你觉得用得少或者觉得,往往是第一感觉。学习他框架的核心,为所用,适合自己才是重点
    whx20202
        55
    whx20202  
       2018-12-17 14:28:57 +08:00
    我觉得 jooq 还是挺好用的,只要你玩法不是特别的骚。
    另外 springboot 也有了 jooq-starter
    adsun
        56
    adsun  
       2018-12-17 14:47:14 +08:00
    @daimazha querydsl 了解下
    xAx
        57
    xAx  
       2018-12-17 14:47:26 +08:00   ❤️ 1
    @HiJackXD 光看比例这话倒也没错。
    --------------------------------------

    不过,Mybatis 才是王道. hibernate 才是过时框架。
    JPA 这玩意,好不好用完全看对应的业务需求。多表查询完全反人类。

    Mybatis 通过自定义 LanguageDriver+注解的方式,不要太高效。
    各种单表、连表、搜索都可以注解带个条件就搞定。

    套用 hibernate 选手常用的一句话“说 hibernate 性能低是因为你不会”----“说 mbatis 开发效率低是因为你不会自定义 LanguageDriver ”
    BeFun
        58
    BeFun  
       2018-12-17 14:54:28 +08:00
    我之前小公司,自己做技术选型的时候用的就是 jpa,真的好用。现在换了比较大的公司,公司线上项目,还有基础项目都是 mybatis 的,你只能用,然后想推荐 JPA,然后老员工就会反对
    我觉的有差别,主要还是在国情上吧
    dbpe
        59
    dbpe  
       2018-12-17 15:02:52 +08:00
    JPA+QueryDSL 挺不错的
    xpresslink
        60
    xpresslink  
       2018-12-17 15:27:37 +08:00
    我觉得楼主没有调研过所以才这么说吧。
    阿里巴巴连任 Java 全球管理组织席位,
    2017 年度开源贡献榜 国内阿里排第一,世界第 9
    这个两条新闻说明什么?

    另外有一点说一下,在阿里 mysql 的使用有规定,禁止使用外键,存储过程、触发器、函数、视图、事件等 MySQL 高级功能 。
    motai
        61
    motai  
       2018-12-17 15:34:10 +08:00
    觉得注解不一定好吧,有的时候,配置文件一改,重启就能用,注解还要重新编译
    gz911122
        62
    gz911122  
    OP
       2018-12-17 15:38:44 +08:00
    @xpresslink 这跟大家讨论的问题有关系吗?
    zander1024
        63
    zander1024  
       2018-12-17 15:44:44 +08:00
    做过一些老外的项目 ,性能要求没那么高,人需求调研也做的好 后面改起来伤筋动骨少一点。 业务逻辑也很清晰,大部分建好类 都是最基础的 sql。 至于国内的项目,需求就能改到你怀疑人生,各种脑残业务报表,sql 能写几页你信不?

    mybatis 是写起来应对需求和脑残业务最舒服的了. 讲真 不是顾及开发效率,我很想手写 sql。 就是开发一时爽,维护火葬场。 2 页 sql 最后自己也看不懂了。
    xpresslink
        64
    xpresslink  
       2018-12-17 16:13:23 +08:00
    @gz911122 当然有啦

    我主要想说国内 java 在 github 贡献并不算少。
    hiberate 在互联网大数据高并发的情况下并不太适用,方案太重要学习的东西多只是一方面。
    gz911122
        65
    gz911122  
    OP
       2018-12-17 16:33:38 +08:00
    @xpresslink 大家讨论的不是 mybatis 和 hibernate 谁好,讨论的是 是什么原因导致了国内外的差异。。。
    niaobulashi
        66
    niaobulashi  
       2018-12-17 16:46:29 +08:00
    说实话,我用过 mybatis 之后,就再也不想用了
    真的很不方便,开发效率底
    arden
        67
    arden  
       2018-12-17 17:24:58 +08:00
    直接用 jfinal 或者 jboot,多方便。
    beneo
        68
    beneo  
       2018-12-17 17:34:18 +08:00
    上规模的企业才会自己写 SQL,一般小心公司 hibernate 足够了
    abcbuzhiming
        69
    abcbuzhiming  
       2018-12-17 18:31:41 +08:00
    楼上这么多人都觉得 hibernate(JPA)好用,我想问一下各位,你们的公司都进化到不需要关系数据库做 OLAP 了,都是 OLTP 业务?如果是这样的话,那我只能说你们很幸运,这么说吧,国内 mybatis 流行的原因其实只有一个,大部分中小型公司都需要依赖关系数据库来进行 OLAP 业务,这恰恰是 JPA 等的弱项
    abcbuzhiming
        70
    abcbuzhiming  
       2018-12-17 18:37:29 +08:00
    @beneo 你说反了,真心的。 国内只有小型公司才有各种奇葩需求需要你 OLAP,上规模的公司,需求流程都要求的很严格,反而可以用 JPA 解决大部分需求
    wjl327
        71
    wjl327  
       2018-12-17 18:51:37 +08:00
    从 stack overflow 的 tags 来看,mybatis 确实远远少于 hibernate
    l00t
        72
    l00t  
       2018-12-18 08:36:18 +08:00
    @kevinhwang #52 都什么年代了还用 Hibernate,你知道十几年前国内 Java 最流行什么吗? SSH 啊,其中的 H 就是 Hibernate。后来大家纷纷都换成了 iBatis, 进而成了 MyBatis。一个坑多,难调试,难维护,生成的那坨东西神仙难懂还性能极低的框架,早扔早好。你说坑多=门槛高?我为什么要琢磨你这根本不该存在的门槛呢?
    l00t
        73
    l00t  
       2018-12-18 08:37:21 +08:00
    @wjl327 #71 因为 Hibernate 遍地是坑啊,所以问题也多嘛。
    gz911122
        74
    gz911122  
    OP
       2018-12-18 09:50:50 +08:00
    @l00t 那是什么原因导致是国内外差异呢?
    ala2008
        75
    ala2008  
       2018-12-18 10:04:58 +08:00
    业务基本都不是单表的。mybatis 直接写 sql 关联就行了。。jpa 也不错,但是公司业务决定了。。。
    xAx
        76
    xAx  
       2018-12-18 10:22:51 +08:00   ❤️ 2
    隔了一天又进这贴,突发奇想,导致国内外框架流行差异的原因: 老外 /国内某些公司 把业务复杂、各种关联关系的系统外包给中日韩?
    自家员工就写些个业务简单的系统?或者,自家员工评估后发现,这系统不好做,赶紧外包出去?
    beneo
        77
    beneo  
       2018-12-18 14:21:51 +08:00
    @abcbuzhiming 数据库是用来存储的,其它任何有点点分析的,都走的是类似 Hadoop 之类的
    beneo
        78
    beneo  
       2018-12-18 14:23:14 +08:00
    @l00t 都什么年代了,不知道 hibernate 真的很稳定么?
    l00t
        79
    l00t  
       2018-12-18 14:29:52 +08:00
    @beneo #78 稳定?一个 ORM 都能用稳定这种词来形容了??那 MyBatis 难道不稳定了?
    abcbuzhiming
        80
    abcbuzhiming  
       2018-12-18 16:50:29 +08:00
    @beneo 你起码是在 1 个中型规模以上的公司,或者专门以大数据为业的行业,去掉这两点外,大把的中小型公司压根就不上 Hadoop 之类的玩意。有钱的公司还是少数,穷逼公司是多数
    abcbuzhiming
        81
    abcbuzhiming  
       2018-12-18 16:54:14 +08:00
    @beneo 另外,就算不做分析,联表查询仍然是很常见的现象,Hibernate 和 JPA 搞联表真心和吃翔一样。哪怕最简单的联表查询也是
    Narcissu5
        82
    Narcissu5  
       2018-12-18 17:05:38 +08:00
    比方说上来一个请求,PUT /item/1111 要更新价格,直接用 sql

    ```sql
    UPDATE items SET price = 11 WHERE id = 1111
    ```

    如果用 Hibernate,得先吧实体查出来,更新,在放回去。而且每次操作都涉及到所有字段,如果是宽表,生成的 sql 有点感人。即使是简单的查询,mybatis 也可以通过限定字段来避免回表查询。当然这些 hibernate 也可以做到,但真的,比 mybatis 麻烦多了。
    beneo
        83
    beneo  
       2018-12-18 18:10:18 +08:00
    ·
    @Narcissu5 dynamic update
    beneo
        84
    beneo  
       2018-12-18 18:12:22 +08:00
    @Narcissu5
    @abcbuzhiming

    复杂 SQL,比方说各种 JOIN 手写 SQL 是不错的
    主要还是开发效率,HIbernate 真的比 Mybatis 不知道搞了多少。

    没有 500W 用户的业务我觉得 Hibernate 足以
    mmdsun
        85
    mmdsun  
       2018-12-20 18:39:55 +08:00 via Android
    @sagaxu 哇。分析的很对。我可以引用一下吗?楼上知乎没有一个我满意的答案。
    Sanko
        86
    Sanko  
       2019-01-13 22:02:41 +08:00 via Android
    所以说,我要学哪个
    gz911122
        87
    gz911122  
    OP
       2019-01-14 11:18:30 +08:00
    @tatelucky 那么你一顿 bb 也没说为啥国外不流行啊
    文不对题的经典表现吧
    tatelucky
        88
    tatelucky  
       2019-01-14 19:00:36 +08:00
    @gz911122 别拿你无知说 bb,懒得和你扯这些,和你讲事实就是 bb,你估计水平也就这样了,已拉黑,浪费时间
    ymstars
        89
    ymstars  
       2019-03-30 21:23:21 +08:00   ❤️ 1
    看了这么多回复。忍不住了!
    1. hibernate 历史悠久并不代表过时,mybatis 这种方式就是未来吗?肯定不是。数据库就是用来存数据的,联表查询一大堆只能说明数据结构设计是有问题的,只是不愿承认或者心里没底而已,竟然还有人为了排序筛选数据,把复杂的运算放到关系型数据库去做,咋不上天呀,你这是叫格力的仓管大爷去替你拿材料,顺便让他根据各种因子计算新型压缩机的功率损耗。数据分析就不应该让关系型数据库做,这叫各司其职。
    2. @Narcissu5 这条语句的逻辑很有意思:“ UPDATE items SET price = 11 WHERE id = 1111 “,难道你公司更新数据的时候不需要先取出数据再更新吗?对了,但凡有一点点的并发需求,无论是乐观锁还是悲观锁,都需要查询到最新的数据不是吗,悲观的加锁,乐观的核对 Version。至于全字段回写数据库,只是不知道有这种操作而已,hibernate 明明可以指定局部字段更新的好吗
    3. 报表逻辑真实存在!这也许是一种让程序员通过关系数据库把数据分析这活也干了的一种借口吧,程序员可不要乐在其中哦
    4. 微服务都大行其道了,还在狂钉外键,一大堆联表查询,sql 语句多达几百行,想想都忍不住噗。定义好业务边界,拆分成独立子系统吧,不然到了一定规模,别说 hibernate 干不了这活,mybatis 手写 sql 又咋样,同样干不了,不信你给某个大厂的高流量数据钉个外键试试,看他们技术总监会不会拿刀追着你。小公司规模往往远没有达到那种撑不住的程度,大厂的高访问量业务数据早已不是这里逼逼的联表查询了。。。
    5. 如果公司的数据库要从 mysql 转移到 Oracle 或者 sqlserver 或者其他的数据库,用 mybatis 的,就问你慌不慌吧。spring 官方支持 jpa 并不是没有依据的,jpa 屏蔽了底层差异。
    既然 Jpa 用起来省心,没必要硬跟某些大厂的步伐,一步两步,似魔鬼的步伐!

    就像淘宝技术十年里说的:

    如用户模块,老的 member.taobao.com 继续维护,不添加新功能,新功能在新的模块上开发,跟老的模块共用一个数据库,开发完毕之后放到不同的应用集群上,另开一个域名 member1.taobao.com ,同时再替换老的功能,替换一个,就把老的模块上的功能关闭一个,逐渐把用户引导到 member1.taobao.com ,等所有的功能都替换完之后,关闭 member.taobao.com 上。从设计上来看,这个 member1 的二级域名应该是一个过渡状态,但我们把 member 域名的代码下线以后,发现很难把 member1 切换回 member,因为有些地方把链接写死了,于是后来很长时间里我们都是在用 member1.taobao.com 这样奇怪的域名。一年后,有另外一家互联网公司开始做电子商务了,我们发现他们的域名也叫 member1.xx.comauction1.xx.com ,复制得毫无保留,我们只能会心一笑。
    Narcissu5
        90
    Narcissu5  
       2019-03-30 22:58:23 +08:00
    @ymstars 如果操作是幂等的为什么不能直接更新。我当然知道 hibernate 可以局部 select 或者更新,问题是写出来真的能看?遇到 insert..select,update..join 这样的操作 hibernate 能做?

    为什么不用连表查询?如果只是单表查询 nosql 做得比关系型好多了。但是关系型活得好好的,为啥?因为 JOIN 确实牛逼啊,因为 JOIN 确实牛逼啊,因为 JOIN 确实牛逼啊。重要的事情说三遍。我也反对过多的 JOIN,但是合理的 JOIN 确实是任何 nosql 都不能企及的银弹啊,join 没错,只是被滥用了而已。再说了微服务和外键有什么关系,外键和 join 又有什么必然联系
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1074 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 23:19 · PVG 07:19 · LAX 15:19 · JFK 18:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.