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

为何不选 Hibernate,非要 MyBatis?

  •  2
     
  •   dc2002007 · 2024-01-26 11:15:02 +08:00 · 15833 次点击
    这是一个创建于 371 天前的主题,其中的信息可能已经有所发展或是发生改变。

    ###一直不能理解 Hibernate 这么优秀的 orm 思想框架,为什么这么多项目还选择了在 xml 里写 sql 的 MyBatis ,求解惑?

    当然我首先是不能接受在 xml 里写 sql 这种行为的!
    orm 不够优秀吗?
    • 当然我知道,这个帖子一旦发出去,必定是会遭到嘲讽了,这个我已经做好了心理预期了
    第 1 条附言  ·  2024-01-26 14:06:49 +08:00
    综合评论来看,我总结一下:国内 java 程序员普遍对面对对象思想理解不深刻,导致 orm 思想很难灵活运用,故行业为了降低开发门槛,刻意选择了 ibatis 方向,这个也是社会培训等多方面造成的问题,jpa 还是主流,这是母庸置疑的,我们需要一个新陈代谢的过程,35 岁可能是这个代谢过程的重要节点。
    第 2 条附言  ·  2024-01-26 16:34:00 +08:00
    这个矛盾足够激烈,我今天赚了 3 个银币,目标达成,mybatis 是最好,我支持 mybatis
    第 3 条附言  ·  2024-01-29 09:12:19 +08:00
    各位宝宝们,这个帖子我下沉了,你们的讨论意见很鲜明,都是久经实战的好程序员,作为你们口中的 op ,我深感欣慰,v 站需要活力,共同努力~
    130 条回复    2024-06-13 10:46:44 +08:00
    1  2  
    aLazarus
        1
    aLazarus  
       2024-01-26 11:18:16 +08:00
    那你怎么看待在 java 中写 hql 呢
    pigeon2049
        2
    pigeon2049  
       2024-01-26 11:18:50 +08:00
    方便基于 velocity 生成代码
    如果你用过 ruoyi 之类的框架,实际上大多数情况你只需要数据库里建好表,页面上导入
    自动生成实体 bean/mapper/service/serviceimpl/mapper.xml/controller/前端 vue 代码
    murmur
        3
    murmur  
       2024-01-26 11:19:09 +08:00
    因为简单的 curd ,hibernate 都不需要了,拖拉拽自动生成,等写复杂报表,权限,表联合的时候就得手写 sql 了
    JerryYuan
        4
    JerryYuan  
       2024-01-26 11:19:21 +08:00 via Android   ❤️ 1
    大概是 hibernate 不能方便的跨几个表联查/用 sql 的骚操作?

    PS:可能只是我不知道怎么搞
    Goooooos
        5
    Goooooos  
       2024-01-26 11:20:24 +08:00
    为什么别人喜欢还要告诉你原因?
    dc2002007
        6
    dc2002007  
    OP
       2024-01-26 11:21:48 +08:00
    @aLazarus hql 在 java 里写还是可以接受的,毕竟起初就是写在代码里的
    dc2002007
        7
    dc2002007  
    OP
       2024-01-26 11:22:13 +08:00
    @Goooooos 你是第一嘲讽的,我很开心
    zzzkkk
        8
    zzzkkk  
       2024-01-26 11:24:35 +08:00
    web 开发的本质就是 sql 增删改查 hibernate 之流等于脱裤子放屁
    potatowish
        9
    potatowish  
       2024-01-26 11:29:16 +08:00 via iPhone   ❤️ 7
    现在用 MyBatis 的都是用 MyBatisPlus 吧,既能不写一行 SQL (单表),又支持手写 SQL (联表、动态 SQL ),直接用原生 MyBatis 的都是上古项目了
    gejun123456
        10
    gejun123456  
       2024-01-26 11:29:32 +08:00
    hibernate 学习曲线高,没点经验容易出问题,mybatis 简单直接,稍微学习就会了出错概率小点,缺点是关联关系的时候需要手动操作的地方多点,可以试试 idea MybatisCodeHelperPro 插件,xml 写 sql 都有代码提示,写起来方便很多。
    yooomu
        11
    yooomu  
       2024-01-26 11:33:24 +08:00   ❤️ 4
    因为在多人合作的大型项目中,每个人水平不一。Hibernate 过重,黑箱过多,能完全掌握的人并不多,一旦出现问题难以定位。而原生 sql 简单,是个后端就会写,方便优化。用面向对象的方式操作数据库确实很爽,但是大型项目需要保证下限,再爽也没用,况且 mybatis plus 操作单表也不用写 sql
    Goooooos
        12
    Goooooos  
       2024-01-26 11:34:50 +08:00
    @dc2002007 这是反问,不是嘲讽
    如果这算嘲讽,那你心理预期有点低
    yooomu
        13
    yooomu  
       2024-01-26 11:35:45 +08:00
    @yooomu 配合现代 IDE 加持,xml 中写 sql 也没什么不好,智能提示,语法检查一应俱全。在一堆项目都是 java8 ,不支持多行字符串的情况下,你难道想在 java 代码中写 sql 吗
    dc2002007
        14
    dc2002007  
    OP
       2024-01-26 11:36:38 +08:00
    @Goooooos 剧情发展所需,凑个数而已!
    issakchill
        15
    issakchill  
       2024-01-26 11:37:05 +08:00
    完全赞成 11 楼说法
    jpa 那套不钻研一下 写出来的太多坑了
    sunwei0325
        16
    sunwei0325  
       2024-01-26 11:43:13 +08:00
    除非你新开项目, 能说服其他成员, 否则老项目你也不敢动这个啊
    Bingchunmoli
        17
    Bingchunmoli  
       2024-01-26 11:51:20 +08:00 via Android
    不会 ssh 只会 ssm ,所以用 mybatis
    goodblue
        18
    goodblue  
       2024-01-26 11:59:12 +08:00
    因为在某个阶段,大家都在追求效率,满足扩张业务,堆人也更好堆
    totoro52
        19
    totoro52  
       2024-01-26 12:00:21 +08:00
    现在除了老项目,新项目应该会首选 mybaitsplus 吧? 建议楼主体验一下 plus 版本就知道多爽了
    纯 mybaits 确实痛苦,但我感觉这种痛苦只是存在简单的项目
    换个思路想,为什么非要在他们两者去选? 简单的项目 Hibernate , 复杂的项目我绝对 mybatis ,不过现在我都用 plus , 等于两者一起用了
    version
        20
    version  
       2024-01-26 12:03:44 +08:00
    单表 JPA 那套确实没问题.也就适合国外单一需求
    国内大融合需求..啥功能都要..基本拍版就改..不写 sql.很难存活.
    weijancc
        21
    weijancc  
       2024-01-26 12:10:30 +08:00
    建议你实际项目用过 hibernate 再来说话, 如果用过, 一定会不可避免的出现需要在代码内写 HQL 或者 SQL 的情况, 和 xml 对比起来, 在代码内写这些 QL 实在是恶心
    wlm201219
        22
    wlm201219  
       2024-01-26 12:16:51 +08:00 via Android
    ORM 学习成本比较高,
    想用好 ORM 需要对面向对象编程有一定的理解,而使用 mybatis 只要会 sql 就好,在这个 35 岁就面临就业问题的社会,前者自然要被淘汰的
    再加上初期大厂的带头作用,国内计算机教育的脱节,mybatis 流行也就不奇怪了
    wlm201219
        23
    wlm201219  
       2024-01-26 12:20:20 +08:00 via Android
    @weijancc 我反倒觉得在代码里写 jpql 很舒服,因为 idea 的检测比在 xml 的 sql 完善得多
    BiChengfei
        24
    BiChengfei  
       2024-01-26 12:21:50 +08:00
    spring data jpa + Mybatis ,复杂查询用 mybatis 写,其他用 jpa ,爽的飞起
    mybatis plus 完全没有 jpa 好用,稍微使用以下就能感觉到
    听说现在国外 jpa 的使用占比很高,国内过去十年,行业人数快速膨胀,培训班很少有教 ORM ,旧项目很多使用的 Mybatis ,为了保持公司技术栈统一,众多原因,Mybatis 占比一直居高不下
    但随着行业沉淀,从业人员水平提升,JPA 占比会慢慢提升,Mybatis 终将推出历史舞台
    Nosub
        25
    Nosub  
       2024-01-26 12:22:09 +08:00 via iPhone   ❤️ 1
    不用思考,hibernate 成本太高,一般人掌握不了,你要一个面向过程的程序员去写面向对象的代码,就算用 Java 也可以写出 c 的既视感。
    maigebaoer
        26
    maigebaoer  
       2024-01-26 12:26:08 +08:00 via Android
    @Nosub 我这是用 php 和 go 写 c 风格代码🫣
    githmb
        27
    githmb  
       2024-01-26 12:28:26 +08:00   ❤️ 7
    我不是不能接受在 xml 里写 sql 这种行为

    我根本不想碰 xml 这种脑瘫东西!
    zed1018
        28
    zed1018  
       2024-01-26 12:32:12 +08:00
    @githmb 哈哈哈哈哈哈,我也是,我是因为搞过 android ,对 xml 深恶痛绝。
    xiaowowo
        29
    xiaowowo  
       2024-01-26 12:34:04 +08:00
    因为 hibernate 是一个类似鸡肋的东西,设计比较复杂。功能又不是那么强大。
    bthulu
        30
    bthulu  
       2024-01-26 12:35:06 +08:00
    mybatis 培训班半天成型, hibernate 至少三天, 是你你选哪个?
    dabai0806
        31
    dabai0806  
       2024-01-26 12:48:21 +08:00   ❤️ 1
    简单 sql 没必要, 复杂 sql 弄不了
    nothingistrue
        32
    nothingistrue  
       2024-01-26 12:58:25 +08:00   ❤️ 2
    Hibernate 与其说是 Object Relation Mapping ,不如是是 Object Model using Relation Model as Technical Implementation 。Hibernate 必须搭配脱离数据库的对象模型才能用好,如果你还是面向数据库关系数据模型来用,那用起来是非常难用得。

    让 Hibernate 被 MyBatis 替代的,正好是让 Hibernate 被大力推广的 SSH 分层架构。这个鸟架构首先是用错了被 EJB 的重量级给搞应激了,完全取消有会话 Bean 从而导致了数据跟程序的分离,进而导致 Java Web 开发从面向对象开发,变成了虽然用着面向对象语言,但搞得还是面向函数,甚至直接面向 SQL 的开发。SSH 实际上用错了 Hibernate ,Hibernate 压根就不适合这种面向函数的开发模式,自然就被替换掉了,当时就算没有 ibatis 也会有其他的替代。至于 MyBatis ,只不过是 ibatis 的封装衍生而已。

    @potatowish #8 MyBatisPlus 并不是 MyBatis 的衍生,它是模仿的 Spring Data Jpa ,只不过前者用 MyBatis 当技术实现,后者用 Jpa ( Hibernate ) 当技术实现。
    Kaiv2
        33
    Kaiv2  
       2024-01-26 12:58:59 +08:00
    能列一下 Hibernate 对比 MyBatis 优秀的地方吗?
    我使用 MyBatis 感觉是简单轻量高性能。
    Hibernate 笨重性能相对较低,复杂查询还是得用 SQL
    yty2012g
        34
    yty2012g  
       2024-01-26 13:17:18 +08:00
    Spring Data JPA ( Hibernate )、MyBatis ( iBatis )都写过,最近在玩 JOOQ ,觉得写起来好爽啊
    wswlaz
        35
    wswlaz  
       2024-01-26 13:20:52 +08:00
    个人项目我选 springdata jpa , 公司项目用 mybatis
    ramoudev
        36
    ramoudev  
       2024-01-26 13:26:35 +08:00
    mybatis 还是挺重的,mybatisplus 仅仅是一个反射升级版,jpa 是思想
    murmur
        37
    murmur  
       2024-01-26 13:34:27 +08:00
    @githmb xml 有原语,可以直接校验格式,企业开发这玩意简直是神器
    murmur
        38
    murmur  
       2024-01-26 13:35:18 +08:00
    而且 xml 可以换行,你 json 支持换行么,yml 支持换行么,大段数据不让换行会死人的
    THESDZ
        39
    THESDZ  
       2024-01-26 13:35:30 +08:00
    短平快,更适合国内弯道超车的思想理念.
    limaofeng
        40
    limaofeng  
       2024-01-26 13:39:49 +08:00
    用 hibernate 必须要 hql 吗? 我就觉得 jpa 比 mybatis 方便。普通查询之类更本用不上 sql , 统计要写 sql 的时候也没 hql 啥事。如果还把 hibernate = 代码里面写 hql ,就是不了解 hibernate
    zhangxh1023
        41
    zhangxh1023  
       2024-01-26 13:40:51 +08:00
    我也觉得,写 xml 好难受,
    好奇大家都是怎么写 xml 开头的那些 "<?xml version="1.0" encoding="UTF-8" ?>" 的,编辑器会自动生成吗 😂
    wanguorui123
        42
    wanguorui123  
       2024-01-26 13:44:56 +08:00
    因为 MyBatis + Plus 可以放飞自我随心所欲,Hibernate 需要较强的工程管理思想才能玩转。
    twofox
        43
    twofox  
       2024-01-26 13:53:18 +08:00
    用 jpa 的时候,发现我搞不定复杂的报表 sql ,写 hql 或者 sql ,jpa 映射的也挺恶心,相比之下 mybatis 的 xml 我写起来更加顺手
    所以主要项目还是 mybatis-plus

    小的项目会用 jpa ,因为可以自动建表,配合 h2 做个小工具舒服
    leohuangsulei
        44
    leohuangsulei  
       2024-01-26 13:55:59 +08:00   ❤️ 1
    @limaofeng JPA 方法名就是查询的真的无法接受
    mohulai
        45
    mohulai  
       2024-01-26 14:09:04 +08:00
    我穿越了?我怎么感觉几个月前看过标题相同的帖子,连附言都一样,但没有“35 岁可能是这个代谢过程的重要节点”这段话
    Umenezumi
        46
    Umenezumi  
       2024-01-26 14:09:04 +08:00   ❤️ 6
    >>> 国内 java 程序员普遍对面对对象思想理解不深刻,导致 orm 思想很难灵活运用

    又被 OP 打标签了,国内程序员好惨
    la2la
        47
    la2la  
       2024-01-26 14:09:27 +08:00
    茴香豆的茴字有几种写法?
    murmur
        48
    murmur  
       2024-01-26 14:12:18 +08:00
    @zhangxh1023 为什么要写,不都是复制别人写的改改,spring 一开始就有 spring side 这样的第三方脚手架,不需要重头写 xml 配置
    fu82581983
        49
    fu82581983  
       2024-01-26 14:12:34 +08:00
    国内的业务需求又紧又奇葩,写 Java 的人水平参差不齐。

    用 Mybatis Plus 简单的可以用 lamda 直接查询/更新,复杂的又支持 xml 写 SQL 。
    x66
        50
    x66  
       2024-01-26 14:12:51 +08:00
    >>> 国内 java 程序员普遍对面对对象思想理解不深刻,导致 orm 思想很难灵活运用
    又被打标签了,我反而觉得是国内的 PM 水平太低,总是设计一些奇葩需求,复杂到使用 hibernate 不太方便
    tairan2006
        51
    tairan2006  
       2024-01-26 14:13:05 +08:00
    装起来了,先把楼主 block 了再说
    WuwuGin
        52
    WuwuGin  
       2024-01-26 14:13:14 +08:00
    积重难返+简中能找到的教程绝大部分是 MyBatis ,搜到哪个用哪个
    Jinnrry
        53
    Jinnrry  
       2024-01-26 14:13:15 +08:00 via Android   ❤️ 2
    8 9 年前想学这玩意的,当时我记得官网写着一句话,大意是“让不懂数据库的人也会操作数据库”。我当时就纳闷了,谁他妈编程不学数据库啊?然后稍微学习了一下,确实不懂数据库也能操作,但是你得学习他的那一套东西,他自己又造了很多概念,方法。但是学他那些东西为什么不直接学数据库呢?
    burymme11
        54
    burymme11  
       2024-01-26 14:13:42 +08:00
    以前我选 Hibernate 。现在我选 Mybatis-plus 。
    dc2002007
        55
    dc2002007  
    OP
       2024-01-26 14:16:23 +08:00
    @tairan2006 别别,我的目标很简单,一个金币而已
    Bingchunmoli
        56
    Bingchunmoli  
       2024-01-26 14:19:22 +08:00 via Android
    @zhangxh1023 全是生成的。。
    txzh007
        57
    txzh007  
       2024-01-26 14:20:52 +08:00
    用不用是我说的算吗?
    cubecube
        58
    cubecube  
       2024-01-26 14:23:13 +08:00
    hibernate 太重了。隐藏了太多的东西,宁愿手写 sql 都不用这玩意儿
    PVXLL
        59
    PVXLL  
       2024-01-26 14:23:24 +08:00
    因为培训班只教了 MyBatis ,自己又不愿意学习 Hibernate 或者水平差根本学不会,中文文档都是老旧文档,英文文档又看不懂😄
    NoNewWorld
        60
    NoNewWorld  
       2024-01-26 14:24:25 +08:00
    现在都用 mybatis plus 的 lambda query 了,基本很少写 xml 了, 一般是那种复杂的多表查询才需要写 sql 。两种方式都方便,不挺好的?
    zzzmh
        61
    zzzmh  
       2024-01-26 14:24:26 +08:00
    SQL 学好了啥都能写,既是啥需求都能一条 SQL 写明白,也是不管后端啥语言都需要写 SQL 以后可以换语言。hibernate 学得好只能写 hibernate 。mybatis plus 想写 SQL 的可以写 SQL ,懒得写 SQL 的可以点出来,实在需要折中可以 @select
    ASpiral
        62
    ASpiral  
       2024-01-26 14:26:28 +08:00
    之前用 JPA 遇到个坑,JpaRepository.save/saveAll 会先判断 id 是否存在,存在则 update ,不存在则 insert ,导致 insert 多条数据会发生多次查询,效率比直接 insert 低,网上查了下 JPA 好像没有直接 insert 多条数据的方法?
    KOMA1NIUJUNSHENG
        63
    KOMA1NIUJUNSHENG  
       2024-01-26 14:32:34 +08:00
    用了 mybatis plus 之后基本没写过 sql 了。
    Geraltt
        64
    Geraltt  
       2024-01-26 14:37:26 +08:00
    这不就是茴香豆的写法吗 和面向对象思想有什么关系
    heeeeeem
        65
    heeeeeem  
       2024-01-26 14:38:46 +08:00
    @leohuangsulei:JPA 方法名就是查询的真的无法接受
    查询方法名这块,我觉得恰恰相反,JPA 规范的查询名比 Mybatis 自己命名查询名好用多了,JPA 一看方法名就知道这个方法的功能,Mybatis 可能出现货不对板的情况。
    heider
        66
    heider  
       2024-01-26 14:41:36 +08:00
    @zhangxh1023 MybatisX
    qq135449773
        67
    qq135449773  
       2024-01-26 14:45:55 +08:00
    因为 ORM 是把双刃剑,虽然给你带来了灵活,hibernate 那种 ORM 对性能损耗太大了,基本市面上所有语言生态对应的 ORM 都会有这种问题。

    并且 ORM 也不是在 99%的时间都是那么的灵活,涉及到一些复杂的查询,该写 sql 可能还要写 sql 。

    当然这两个框架我个人觉得没有谁对谁错,无非只是一些迭代速度和性能牺牲上的取舍而已,毕竟都用 Java 了,这种取舍应该早就已经在考虑之内了。

    并且我还想提示 lz 一点,MyBatis3 是有 mapper annotation 的,也就是说可以直接在 Java 里面写 sql 而不用非得创建个 xml 。

    https://mybatis.org/mybatis-3/java-api.html#mapper-annotations

    当然在现在国内这种“你升任你升,我用 Java8”的大环境来讲,提这个也没用,因为 text block 我没记错的话应该是 jdk15 才有的东西,jdk8 下做这个还不如去写 xml 。
    xuanbg
        68
    xuanbg  
       2024-01-26 14:52:45 +08:00
    请恕我眼拙,spring 这一套就没有什么面向对象的味道在里面,完全就是面向过程的思路。

    而且,我没有觉得面向对象要比面向过程高明多少。面向对象的特点就是将逻辑和数据统一起来封装成一个对象,而不是面向过程,数据需要用表的方式单独进行管理。
    limaofeng
        69
    limaofeng  
       2024-01-26 14:56:47 +08:00
    @leohuangsulei "JPA 方法名就是查询的真的无法接受" 我用的不是这种方式。
    ```
    List<Employee> employees = this.employeeDao.findAll(PropertyFilter.newFilter().equal("links.type", dingtalk).equal("links.linkId", id));
    ```
    自己封装了一个查询对象,最终转换为 Specification 查询。
    koloonps
        70
    koloonps  
       2024-01-26 15:09:01 +08:00   ❤️ 1
    jdk15 才支持多行字符串,没有多行字符串支持在 Java 中写 sql 不如在 xml 中写 sql
    ZGame
        71
    ZGame  
       2024-01-26 15:11:20 +08:00
    C# Linq Ef 表示, 都是垃圾。 H 底层的 queryDsl 都只是抄了 Linq 的一点皮毛...
    iamshang
        72
    iamshang  
       2024-01-26 15:13:03 +08:00 via Android
    喜欢 hibernate 来北美吧,没有公司用 MyBatis😂
    koloonps
        73
    koloonps  
       2024-01-26 15:13:18 +08:00
    @zhangxh1023 用插件生成,有个插件叫 MyBatisCodeHelperPro 可以尝试下
    twofox
        74
    twofox  
       2024-01-26 15:18:24 +08:00   ❤️ 3
    看到 append 有点绷不住了

    综合评论来看,我总结一下 OP:OP 应该没写过复杂逻辑的业务以及没有快速交付项目的经验,导致简单 curd 用 jpa 比 mybaitis 舒服,故为彰显标新立异,刻意贬低其他技术栈的优点,这个也是项目经验过少等多方面造成的问题,jpa 是主流,但 mybaits 在国内更加主流这是毋庸置疑的。OP 需要一个被社会毒打的过程,复杂的业务可能是这个毒打过程中的重要节点.
    cheng6563
        75
    cheng6563  
       2024-01-26 15:18:56 +08:00
    用 hibernate 也不见得面向对象了啊,你会把支付的业务代码写到 order pojo 里吗?
    zackzergzeng
        76
    zackzergzeng  
       2024-01-26 15:24:15 +08:00
    个人觉得 orm 就是心智模型更易理解,而且不用太关注 sql 本身,但是扩展性和性能不太好,国内环境很难忽略性能(很多地方动不动就百万数据之类的),mybatis 再更广范围内更吃得开更适用
    还有一点,不是框架优秀就一定流行的,更是配业务广泛才是王道
    28Sv0ngQfIE7Yloe
        77
    28Sv0ngQfIE7Yloe  
       2024-01-26 15:24:24 +08:00
    @twofox #72

    如何才能像你一样优秀
    twofox
        78
    twofox  
       2024-01-26 15:30:23 +08:00
    @Morii 还是 OP 优秀,本以为他是想探讨技术优劣。结果上来就说用 mybatis 的不会面向对象,把我给整笑了
    dode
        79
    dode  
       2024-01-26 15:34:38 +08:00
    觉得在 MyBatis 注解里写多行字符串 sql 挺好的
    zacard
        80
    zacard  
       2024-01-26 15:42:45 +08:00   ❤️ 1
    其实没有非要用 mybatis ,还是要看业务场景。Hibernate 与 MyBatis 的选择是经典的模型优先 vs 数据优先的问题(或者称之为 jpa first vs db first )、范式 vs 反范式的较量

    个人经验看,toC 的情况 mybatis 会好一点,对延迟敏感,我们需要谨慎设计调优数据表的 schema ;而 toB 、一些内部项目、流量不大的项目完全可以用 jpa 快速开发

    至于 jpa 太重,黑盒,性能差之类的问题是因为 jpa 提供了足够的便利让我们专注在模型设计而非数据 crud 上,本是一把双刃剑。如果仔细看过 jpa/Hibernate 官网文档,你可以设计出性能不差、完全不用写 sql 的 jpa 模型
    jccily
        81
    jccily  
       2024-01-26 15:43:18 +08:00
    Hibernate 相较于 MyBatis 上手成本高点。国内互联网行业发展快,需要新手速成,立即投入一线搬砖。因此当然是越容易上手的技术越受欢迎。
    jkc626
        82
    jkc626  
       2024-01-26 15:46:38 +08:00
    总结下部分人的话:我用某框架,别人不用,是因为别人水平差学不会。
    对此想借用 linus 说的一句话:talk is cheap. show me the code.
    要炫技请上 GitHub
    Sprdance
        83
    Sprdance  
       2024-01-26 15:52:08 +08:00
    个人理解是 MyBatis 比较符合 DDD 直觉:Java 代码写原始数据接口定义,XML 写实现。并且 MyBatis 对 Java 对象和数据库对象的相互转换比较友好
    (也有可能是我 MyBatis 写多了……)
    wdlth
        84
    wdlth  
       2024-01-26 15:55:35 +08:00
    如果用 pgSQL 、Hive 或者要写窗口函数那些,一般都是直接复制查询工具的 SQL ,不需要再次去写查询代码。
    ShadowPower
        85
    ShadowPower  
       2024-01-26 15:55:42 +08:00
    Hibernate 不如 MyBatis 灵活、高性能、轻量。

    公司的内部框架已经把 MyBatis 的用法封装得跟 Hibernate 一样了。
    用起来感觉几乎完全一样(只是长得不一样),绝大多数业务代码一行 SQL 都不需要写,还简化了一些通用业务逻辑。
    例如完全无感的多语言设计,只需要给实体类和实体类属性加注解就可以了。会自动根据当前用户设置来更改 SQL 语句。
    其他的例子,例如给实体类加个流水号编码注解实现创建数据时自动生成符合规则的流水号。有前后缀、用户标识、日期时间、自增序列等等信息。
    还有很多很多。

    基于 MyBatis 做这种定制比较简单,容易理解。而 Hibernate 就很复杂了。
    angryfish
        86
    angryfish  
       2024-01-26 16:02:46 +08:00
    综合 op 的综合总结评论来看,op 就是没看评论自己总结了一下。
    wetalk
        87
    wetalk  
       2024-01-26 16:05:42 +08:00
    @zhangxh1023 根据表模型逆向自动生成,没几个人从头开始写 xml
    yogogo
        88
    yogogo  
       2024-01-26 16:18:40 +08:00
    @JerryYuan #4 很简单的关联,配置好关系
    leohuangsulei
        89
    leohuangsulei  
       2024-01-26 16:20:29 +08:00
    @heeeeeem 简单查询都无所谓,你复杂一点方法名太长了,有些不规范的还带下划线 看的难受
    romisanic
        90
    romisanic  
       2024-01-26 16:24:11 +08:00
    综合 OP 的 append 来看,OP 的 append 把自己特点总结了一下,并想当然的扣到了整个国内研发的头上。
    billlee
        91
    billlee  
       2024-01-26 16:26:01 +08:00 via Android
    @murmur yaml 不但支持换行,还支持好多种换行方式 🐶
    waterlaw
        92
    waterlaw  
       2024-01-26 16:55:29 +08:00 via Android
    mybatis 灵活性更高一点,hibernate 封装性更好
    wupher
        93
    wupher  
       2024-01-26 16:58:26 +08:00
    都有用过,但新项目一般使用 JPA / Hibernate ,相对日常出活更快。
    TGhoull
        94
    TGhoull  
       2024-01-26 17:10:35 +08:00
    我觉得好多人都没说到点上,不是不选 Hibernate ,而是在国内你根本没得选,因为大部分项目用的基本都是 Mybatis, 后续如果有新项目肯定还是选择自己熟悉的 ORM 框架,你如果观察国外社区讨论关于 ORM 选择,肯定是 Hibernate 占有率大大高于 Mybatis ,因为国外的项目大部份都是使用 JPA 那一套,有时候优缺点并不是首先考虑的点,最契合自己团队的才是好的
    changdy
        95
    changdy  
       2024-01-26 17:12:41 +08:00   ❤️ 2
    我决定往 op 身上开个炮 ..
    你用 JPA / Hibernate 了解过数据库的那些技术 和 trick ?

    会用临时变量, 虚拟列 ,强制索引 , STRAIGHT_JOIN 吗?
    cte 会玩吗?

    当你决定思路定格在 orm 上时 ... 你就是真的一个 crud boy 了
    jaycelhz
        96
    jaycelhz  
       2024-01-26 17:15:20 +08:00
    我感觉从开始学 java 就开始隔几天看到这种问题,过几个月我也再发一遍, 水经验的好问题
    carytseng
        97
    carytseng  
       2024-01-26 17:27:55 +08:00
    做多几个复杂报表功能,可能就不会有啥疑问了
    blackmirror
        98
    blackmirror  
       2024-01-26 17:44:59 +08:00
    其实问题在于甲方需求经常乱改。。。。。
    wlm201219
        99
    wlm201219  
       2024-01-26 18:02:23 +08:00
    @ASpiral 有的,自己写 jpql
    ZeroDu
        100
    ZeroDu  
       2024-01-26 18:11:13 +08:00
    用 Mybatis Plus 现在基本很少写 xml ,联查甚至还有 mybatis plus join ;真的很少写 xml 了
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1850 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 03:57 · PVG 11:57 · LAX 19:57 · JFK 22:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.