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

MyBatis 框架大家在使用的吗?

  •  1
     
  •   L0L · 2023-04-12 17:00:20 +08:00 · 17579 次点击
    这是一个创建于 620 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位 V 友,大家日常开发中,还有使用 mybatis 的框架的吗?

    google 了下,发现流行的框架中基本看不到他的影子,但是在传统行业的工作中,感觉还是用到的很多,来到 v 站问问广大的 v 友日常使用的还算多吗?

    138 条回复    2023-04-25 19:40:30 +08:00
    1  2  
    ghost024
        1
    ghost024  
       2023-04-12 17:03:13 +08:00
    肯定多啊,小厂和中厂都在用吧
    leozzf
        2
    leozzf  
       2023-04-12 17:03:14 +08:00 via Android
    现在还在用 XML 真的该淘汰了
    zero47
        3
    zero47  
       2023-04-12 17:03:58 +08:00
    国内还是主流吧,都喜欢写 sql
    zero47
        4
    zero47  
       2023-04-12 17:04:52 +08:00
    @leozzf 微信 API ,你值得吐槽
    chihiro2014
        5
    chihiro2014  
       2023-04-12 17:04:59 +08:00
    国内难道不是 mybatis/mybatis-plus 一把梭么。
    用 JPA/hibernate 的不多。
    其次可能是 JOOQ 这种冷门框架。
    或者也有佬喜欢 JDBC 原生一把梭。
    urnoob
        6
    urnoob  
       2023-04-12 17:05:37 +08:00
    xml 中拼 sql 多么简单粗暴.....不是挺好么 现在都用什么?
    mineralsalt
        7
    mineralsalt  
       2023-04-12 17:06:38 +08:00
    MyBatis Plus
    leeraya
        8
    leeraya  
       2023-04-12 17:10:32 +08:00
    java 业务系统 ORM 基本都是 mybatis ,适合梭哈。
    L0L
        9
    L0L  
    OP
       2023-04-12 17:12:38 +08:00
    @leozzf xml 格式上死板;相比与 yml 那种,感觉有时候会好用点(少一个空格很崩溃)
    L0L
        10
    L0L  
    OP
       2023-04-12 17:13:28 +08:00
    @ghost024 有个在某里的同学,他们好像也还在用 mybatis ,不知道是不是个例
    kongkongye
        11
    kongkongye  
       2023-04-12 17:13:41 +08:00 via iPhone
    @urnoob 前端一堆搜索条件输入框的,mybatis 里方便实现吗?
    L0L
        12
    L0L  
    OP
       2023-04-12 17:14:07 +08:00
    @mineralsalt mp 用起来,确实能提升效率
    L0L
        13
    L0L  
    OP
       2023-04-12 17:15:13 +08:00
    @chihiro2014 mp 做的确实不错,直接用起来还是很嗨
    Richardhtw
        14
    Richardhtw  
       2023-04-12 17:15:17 +08:00
    所以现在主流的在用什么
    muchenlou
        15
    muchenlou  
       2023-04-12 17:15:59 +08:00
    op 用的是什么呢?我比较喜欢 mybatis-plus
    cheng6563
        16
    cheng6563  
       2023-04-12 17:16:08 +08:00
    @kongkongye 这种乱拼 SQL 的需求还就 Mybatis(-plus)好实现,换其他的硬 ORM 还更麻烦
    L0L
        17
    L0L  
    OP
       2023-04-12 17:17:23 +08:00
    @Richardhtw https://rollbar.com/blog/most-popular-java-web-frameworks/ 搜了几个排名基本和这个差不多,hibernate 看起来用的群体很大。
    hui9000
        18
    hui9000  
       2023-04-12 17:19:31 +08:00
    @ghost024 大厂都用什么?
    MonkeyJon
        19
    MonkeyJon  
       2023-04-12 17:20:47 +08:00
    mybatis+mybatisplus
    yule111222
        20
    yule111222  
       2023-04-12 17:22:21 +08:00   ❤️ 2
    不用了,我用 kotlin 和 ktorm
    CloudnuY
        21
    CloudnuY  
       2023-04-12 17:24:43 +08:00
    蹲个大厂的方案,刚好近期要重新做一套我司的基础框架
    bugmakerxs
        22
    bugmakerxs  
       2023-04-12 17:25:13 +08:00   ❤️ 1
    玩具项目 JPA ,公司项目 mybatis 。简单逻辑 JPA 快一点
    BBCCBB
        23
    BBCCBB  
       2023-04-12 17:26:36 +08:00
    不用 mybatis 用什么... mybatis 上面的扩展, mybaits plus 这种, 就很好用..

    其他的 orm 拼 sql 的时候没有这么灵活的..
    BBCCBB
        24
    BBCCBB  
       2023-04-12 17:28:43 +08:00
    其他各种 orm 的 dsl 写起来感觉表现力始终不如 sql 简单快捷清晰?
    L0L
        25
    L0L  
    OP
       2023-04-12 17:31:50 +08:00
    @muchenlou 第一家公司是魔改的 mybatis ,然后为了和产品一起卖的;现在的公司用的 mybatis+mybatis-plus ,复杂的报表需求,一个语句出来就很爽。
    L0L
        26
    L0L  
    OP
       2023-04-12 17:32:25 +08:00
    @CloudnuY v 站应该友不少大厂的朋友吧,一起蹲一蹲
    28Sv0ngQfIE7Yloe
        27
    28Sv0ngQfIE7Yloe  
       2023-04-12 17:35:29 +08:00
    坐标千人小厂

    Java 还是 Mybatis + Mb-plus
    chenPiMeiHaoChi
        28
    chenPiMeiHaoChi  
       2023-04-12 17:37:16 +08:00
    在写 webflux ,用 r2dbc 。
    L0L
        29
    L0L  
    OP
       2023-04-12 17:37:40 +08:00
    @Morii 头像好评
    wellerman
        30
    wellerman  
       2023-04-12 17:41:56 +08:00
    mybatis-plus 啊,基本不用写 sql
    yty2012g
        31
    yty2012g  
       2023-04-12 17:43:51 +08:00
    To C 的服务,我们一般使用 JDBCTemplate 。To B 的服务,MyBatis 、Spring Data JPA 都有使用。
    zoharSoul
        32
    zoharSoul  
       2023-04-12 17:45:29 +08:00
    国内大厂都在用
    dwlovelife
        33
    dwlovelife  
       2023-04-12 17:50:00 +08:00
    坐标狗东 Mybatis+MybatisPlus , 现在最流行的框架就是 Mybatis 了,有什么更牛逼的解决方案?
    wetalk
        34
    wetalk  
       2023-04-12 17:57:55 +08:00
    基本上用 Java 这套体系的,都是 MyBatis + plus ,其他的不灵活,或者代价过高
    cweijan
        35
    cweijan  
       2023-04-12 17:58:19 +08:00
    @leozzf 在其他 orm 框架的对比下, xml 任然是在 Java 中写 SQL 最高效最便于维护的方式.
    cedoo22
        36
    cedoo22  
       2023-04-12 18:06:15 +08:00
    witcherhope
        37
    witcherhope  
       2023-04-12 18:17:33 +08:00
    都可以吧,做好防腐隔离,别让 orm 污染业务层就好
    renyijiu
        38
    renyijiu  
       2023-04-12 18:27:46 +08:00
    最近几年一直用 jooq ,开发者异常活跃
    L0L
        39
    L0L  
    OP
       2023-04-12 19:22:57 +08:00
    @cedoo22 我是搜索的统计的排行榜;国内用 mybatis 的还是很多的; hibernate 的总量是比 mybatis 多的。
    L0L
        40
    L0L  
    OP
       2023-04-12 19:25:38 +08:00
    @renyijiu jooq 目前在尝试;所在行业要求大改造,大量的 Oracle 需要转换成 mysql ,在使用 jooq 提供的转换功能。
    EminemW
        41
    EminemW  
       2023-04-12 20:25:39 +08:00
    @kongkongye #11 mybatis 可以在 xml 里面写 IF 判断,方便的很
    oneisall8955
        42
    oneisall8955  
       2023-04-12 20:32:48 +08:00 via Android
    @kongkongye 成熟的 orm 框架都支持
    luzemin
        43
    luzemin  
       2023-04-12 20:36:36 +08:00
    mybatis +1
    beginor
        44
    beginor  
       2023-04-12 20:38:28 +08:00 via Android
    最近实现了个类似 mybatis 功能的后台 api 系统,在数据库存储 xml+sql ,用户可以在线上定义参数,配合编写 xml+sql 来定义 api 🤭
    volatileSpark
        45
    volatileSpark  
       2023-04-12 20:44:24 +08:00
    Google 趋势的数据值得参考,国内目前肯定是 mybatis/mybatis-plus 居多,国外则是 JPA/hibernate 居多。
    ychost
        46
    ychost  
       2023-04-12 20:52:24 +08:00
    @ghost024 大厂也在用 myBatis ,还是很原始的 XML ,mbp 和 JPA 都用的少
    ychost
        47
    ychost  
       2023-04-12 20:53:25 +08:00
    主要是 JAVA 不支持 C# 那样的语法树,不然有 LINQ 就美滋滋了,除了 LINQ 其它 ORM 都一个样
    hhjswf
        48
    hhjswf  
       2023-04-12 21:33:02 +08:00 via Android
    还有其他更好方案吗。我不喜欢用 querywraper ,稍微复杂点就不够直观
    KevinBlandy
        49
    KevinBlandy  
       2023-04-12 21:35:32 +08:00
    spring-data-jpa + queryDsl 或者 Jooq 。这种编程式 SQL 太爽了,比 mybatis 这种手写 SQL 不知道高到哪里去了。

    顺便推荐一波 spring-data 系列的中文文档。 [https://springdoc.cn/]( https://springdoc.cn/)
    k9990009
        50
    k9990009  
       2023-04-12 23:20:20 +08:00 via Android
    用 mybatis-plus ,流行的低代码都用这个,很好做前后端的查询封装。刚试用 mybatis-plus-jion 这个联表查询插件
    cedoo22
        51
    cedoo22  
       2023-04-12 23:58:59 +08:00
    @k9990009 小系统用连表还行,稍微大点的都没法用连表查
    si
        52
    si  
       2023-04-13 00:05:23 +08:00
    在用 mybatis-plus
    silentsky
        53
    silentsky  
       2023-04-13 01:00:05 +08:00 via Android
    就一点 mybatis 写的 SQL 方便查找定位 其他框架 出问题了 你都不好找
    potatowish
        54
    potatowish  
       2023-04-13 01:17:33 +08:00 via iPhone
    必须是 mybatis plus
    suyabgaran
        55
    suyabgaran  
       2023-04-13 01:22:03 +08:00
    国内还是 Mybatis 、Mybatis-plus 多。但是我现在都用 JOOQ ,写起来真的很爽,我是挺不喜欢 Mybatis 这一套的。
    我看好多人推崇 mybatis-plus ,说基本不用写 sql ,但如果是为了不写 sql 才用 mybatis-plus 那为何不直接用 jooq 呢(疑惑)?
    jooq 其实更加容易调试,而且条件判断可以直接用 Java 来搞定,而且不用定义一堆 xxxMapper 和 xml ;
    复杂的查询,用视图或者多次查询+后端处理就好了呀。
    至于更加复杂的查询,其实用 mybatis 也好不到哪里去吧?
    LeegoYih
        56
    LeegoYih  
       2023-04-13 01:46:43 +08:00   ❤️ 7
    MyBatis+MyBatis-Plus 组合简直就是屎上加屎 💩²

    QueryDSL+Spring Data JPA 联表查、子查询、手写 SQL 都是基本功能,最喜欢的功能是,只需要在 Repo 接口中定义方法, 启动时会自动生成代理对象,太香辣。

    PVXLL
        57
    PVXLL  
       2023-04-13 02:12:38 +08:00 via iPhone
    mybatis 狗都不用
    yuanmomo
        58
    yuanmomo  
       2023-04-13 02:39:27 +08:00 via iPhone
    @ghost024 17 年某里的时候,用的 mybatis
    nnegier
        59
    nnegier  
       2023-04-13 04:44:30 +08:00 via Android
    之前用 JPA ,现在回到 MyBatis 了
    billccn
        60
    billccn  
       2023-04-13 05:11:23 +08:00
    老实说 YAML 根本不应该算 Markup Language ,因为它的语法只在行首,字符串里面是没有标记能力的。
    像 MyBatis 需要的在 SQL 中间动态插入标签的能力 YAML 无法胜任,硬要用的话还得自己造轮子。

    设想这样的 SQL 模板语言要多少行才能写完一个复杂的查询?而且要在从 SQL 工具之间复制已经调好的查询,手工处理量非常大,等于人工做了个 lexer 。

    ```
    - "SELECT"
    - if: ...条件...
    then: COL1
    - "FROM t WHERE rownum <"
    - eval: ...表达式...
    ...
    ```

    XML 就写得很好读:

    ```
    SELECT <if test="条件">COL1</if> FROM t WHERE rownum &lt; #{id}
    ```
    dreamramon
        61
    dreamramon  
       2023-04-13 08:10:53 +08:00
    jooq 一直用,mybatis 太慢了。
    vagusss
        62
    vagusss  
       2023-04-13 08:52:23 +08:00
    @LeegoYih 写这么一大堆, 真的香么
    LeegoYih
        63
    LeegoYih  
       2023-04-13 08:56:20 +08:00 via iPhone
    @vagusss 别张口就来,你用 mybatis 代码量能比这个少?
    leimu012
        64
    leimu012  
       2023-04-13 09:01:02 +08:00
    我干过的项目一般都是 mybatis+mybatis-plus
    gowk
        65
    gowk  
       2023-04-13 09:01:38 +08:00
    Java 还在玩 MyBatis MyBatis-Plus 这些上古的屎玩意,真让我感到恶心
    宁可用 JPA ,虽然 JPA 用的菜,心智负担重,我怎么就对 Java 这些重框架喜欢不起来呢
    都是 CRUD 写业务的居多,用 .NET 不香吗,C# 语法太他妈爽了好嘛!!

    贴个图 (doge

    https://imgur.com/lYFSbjA
    vagusss
        66
    vagusss  
       2023-04-13 09:02:18 +08:00
    @LeegoYih 我的意思是,没看出来和 mybatis 有太大区别啊, 只是由拼 sql 变成了拼接 java 代码
    gowk
        67
    gowk  
       2023-04-13 09:02:25 +08:00   ❤️ 3
    hb0730
        68
    hb0730  
       2023-04-13 09:03:47 +08:00
    公司要用啥就用啥,自己的想怎么用就怎么用
    Goalonez
        69
    Goalonez  
       2023-04-13 09:11:53 +08:00
    用了 mybatis,靠自动生成代码,不太需要写基础 sql 和 if 条件.
    没有用 myabtis-plus,不太喜欢在业务层一堆查询语句
    lazyfighter
        70
    lazyfighter  
       2023-04-13 09:13:32 +08:00   ❤️ 1
    多, 国外普遍用 hibernate 、jpa ,但说实话 hibernate 我觉得太厚重了,jpa 还是不错的,不过一直没有在实际的生产项目中使用, 我比较推崇简单,这个简单不是单纯的 coding 量比较少,而是回归事务本身,以极简的架构、抽象方式去实现项目, 类比于 sql 就是要回归于 sql 语句本身,可见的 sql ,同时再将存储层很好的抽象隔离,所以我觉得 mybatis 本身实现的不错,以至于我搭建的项目都还在用 mybatis ,至于 mybatis-plus 我一向不推崇,这个项目在我看来抛弃了 myabtis 的精髓
    tairan2006
        71
    tairan2006  
       2023-04-13 09:19:39 +08:00
    idea 装个插件,写 mp 爽的一批,比在代码里拼 SQL 爽多了
    hhjswf
        72
    hhjswf  
       2023-04-13 09:19:44 +08:00
    @LeegoYih 如果你这代码每个 value 都做判空的话,代码看的不头大?这种事情丢到 xml 里我觉得比较舒服
    wanguorui123
        73
    wanguorui123  
       2023-04-13 09:19:54 +08:00
    mybatis 和 hibernate 都用,我更喜欢 hibernate 根本不需要手动连表查询,而且缓存和更新机制底层做的比较完善,其次是 hibernate 迁移数据库非常方便。
    dif
        74
    dif  
       2023-04-13 09:24:31 +08:00
    那肯定在用了,而且在 ORM 中算用的最多的。
    另外,@gowk .NET 语法爽是爽,生态不行,覆盖面太低。mybatis 也不是什么上古屎玩意,能做出业务,能挣到钱,成本低,bug 少,安全漏洞很少听到,这就是优点。
    undefine2020
        75
    undefine2020  
       2023-04-13 09:26:04 +08:00
    @gowk 那干嘛不用 php 呢 不更爽。
    Procumbens
        76
    Procumbens  
       2023-04-13 09:27:23 +08:00
    在国内的论坛问的话就是大部分都有 MyBatis 。
    就像在国内用的前端框架 Vue 也应该比 React 多
    ysq
        77
    ysq  
       2023-04-13 09:29:04 +08:00
    @LeegoYih JPA 注解里写简单语句还行,多行的语句时就很麻烦,无论是粘贴还是复制出来调试都没找方便的方式,最坑的是 在事物里 默认的 SQL 语句竟然不是按代码顺序执行的,排查了好久才找到原因,参考这个 https://blog.csdn.net/weixin_36795183/article/details/100574823
    wolfie
        78
    wolfie  
       2023-04-13 09:33:09 +08:00
    @LeegoYih #54
    让别人维护试试。
    LeegoYih
        79
    LeegoYih  
       2023-04-13 09:38:22 +08:00
    @wolfie 有什么问题?
    gongquanlin
        80
    gongquanlin  
       2023-04-13 09:39:36 +08:00
    laravel 转的 spring ,php 框架里的 orm 都是和建造者模式似的调用,写起来很爽,运维起来苦逼的不行
    senx0000
        81
    senx0000  
       2023-04-13 09:41:50 +08:00
    现在在用 mybatis-flex ,结合了 querydsl 和 mybatis
    https://imgur.com/frjRmK7
    senx0000
        82
    senx0000  
       2023-04-13 09:43:25 +08:00
    sqmwin
        83
    sqmwin  
       2023-04-13 09:47:18 +08:00   ❤️ 4
    为什么都把 sql 语句通过 java 实现觉得很优雅?不应该把 java 和 sql 明确分开吗。一直觉得在 java 里面写 sql 很难维护
    wxlwsy
        84
    wxlwsy  
       2023-04-13 09:51:46 +08:00
    我在用 dynamicsql, 比 xml 好些.
    nothingistrue
        85
    nothingistrue  
       2023-04-13 09:53:39 +08:00
    @L0L 搜索引擎趋势,没多大意义。google 中文搜索已经废了,它的趋势基本只能反映国外,和国内的“会用 google 或英语的人”的领域。另一方面,不管是 MyBatis 还是 MyBatis Plus ,它的特点就是简单——框架本身和使用框架都简单,这也就注定了它没啥可搜索的,自然也上不了搜索引擎趋势。

    至于框架的选择,搭配上 Spring Data Jpa 之后,Jpa/Hibernate 体系,门槛已经小很多了,现在各项比较都是碾压 Mybatis 系列。只不过国内螺丝大厂已经积重难返了。你必须会一份门槛低的东西,以方便到大厂拧螺丝。但如果你是个人开发,以及真正的技术性小团队开发,那还是 Spring Data Jpa 一步到位。
    tilv37
        86
    tilv37  
       2023-04-13 09:57:41 +08:00
    目前人在外企,我们一般都是 JPA ,国外同事一般也是 JPA 。
    不过确实没有遇到一个查询需要写超过 30 行 sql 的,所以 JPA 完全够用了
    nothingistrue
        87
    nothingistrue  
       2023-04-13 10:01:24 +08:00
    @lazyfighter #70 这个建议你连 Java 也别用了,直接用 SQL 再套个简单的 Javascript 前端就够了,SQL 本身就能用存储过程做逻辑开发的。
    @ysq #77 JPA 也可以用 XML 写 JPQL ,只不过不是主流,仅有一些特定情况才会需要写多行语句。
    LeegoYih
        88
    LeegoYih  
       2023-04-13 10:36:15 +08:00
    @hhjswf #72 QPredicate 封装好了可以自动判空,没有联表的条件会自动去掉 join
    MyBatis XML 判空每个都要写一遍<if test="">,循环要写<foreach item="">,要实现下面的 SQL 至少得写一页 XML
    javlib
        89
    javlib  
       2023-04-13 10:52:34 +08:00
    mybatis 的优点是手写 sql 方便,而且提供了一些简单的控制语句,动态 sql 也能搞定。而且在 xml 写的 sql ,已经很接近最终 sql ,找问题的时候也比较方便。

    选择 jooq 或者 hibernate ,主要是想要类型安全。mybatis 只有在运行起来后,才能发现自己的 sql 对不对。不过这个也可以改善,可以写插件在单元测试中导出 sql ,然后用 sqlparser 校验 sql 的正确性。
    lazyfighter
        90
    lazyfighter  
       2023-04-13 10:59:12 +08:00
    @nothingistrue 嗯 你说的对~
    hankli
        91
    hankli  
       2023-04-13 11:19:17 +08:00
    JPA 和 Mybatis 都用
    配合 Github Copilot 写 Mybatis 也很舒服了现在,所以说 mp 是真的鸡肋!
    witcherhope
        92
    witcherhope  
       2023-04-13 11:30:45 +08:00
    @LeegoYih #56 这代码看着也不怎么直观,加上 Java 本身表现力不足,强行上 DSL 只会增加通用理解成本,Mybatis 固然有缺点,但简单无黑魔法让它更容易接受和推广。
    xuanbg
        93
    xuanbg  
       2023-04-13 12:18:33 +08:00
    一直用 Mybatis ,但从来都不写 xml 。都是直接 @Select("select xx from xx;")这样的注解
    wqzjk393
        94
    wqzjk393  
       2023-04-13 12:27:48 +08:00 via iPhone
    前数据分析师,日常工作就是折腾上万行的 sql 脚本,所以不喜欢在开发中还用 sql 干活,基本上 jpa 一把梭了
    Huelse
        95
    Huelse  
       2023-04-13 13:16:35 +08:00
    很多新的设计都趋于使用高阶函数而避免直接写 sql ,如这个 scala 的 quill
    lanlanye
        96
    lanlanye  
       2023-04-13 13:24:45 +08:00
    ActiveRecord, SQLAlchemy 使用者前来围观……朋友一直说 Hibernate 过时了,Mybatis 更好,看来并不是这样?
    runliuv
        97
    runliuv  
       2023-04-13 13:28:58 +08:00
    C# EF 一把梭。
    xiaocaiji111
        98
    xiaocaiji111  
       2023-04-13 13:29:14 +08:00
    谁说 mybatis 就一定要写 xml 。另外 xml 里面语法古板,带来得好处就是看着清晰。很多 sql 静态分析工具在代码上线钱可以扫描 sql 是否存在问题,其他得运行时生成 sql 得 orm 框架,怎么做分析呢。只能全部跑出来在分析吧。
    suyabgaran
        99
    suyabgaran  
       2023-04-13 13:29:16 +08:00
    @lanlanye ActiveRecord 好啊,我也想学 Ruby 和 Rails
    wolfie
        100
    wolfie  
       2023-04-13 13:34:28 +08:00
    @LeegoYih #54
    1. 你这种方式查询,mybatis-plus 可以实现。
    2. 有点复杂的 xml SQL 随便换个人就可以修改
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1136 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:54 · PVG 01:54 · LAX 09:54 · JFK 12:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.