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

MyBatis 框架大家在使用的吗?

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

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

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

    138 条回复    2023-04-25 19:40:30 +08:00
    1  2  
    zjsxwc
        101
    zjsxwc  
       2023-04-13 13:51:11 +08:00
    @billccn
    yaml 是 json 的超集,完全兼容 json ,
    君不见那么多给予 json 的 orm ,
    用 yaml 做 orm 就更不在话下了,
    比如 python 的 mlalchemy 就是 yaml

    https://pypi.org/project/mlalchemy/
    ysq
        102
    ysq  
       2023-04-13 13:51:17 +08:00
    @Huelse 这个还没 SQL 看着清晰呢
    RainCats
        103
    RainCats  
       2023-04-13 14:26:11 +08:00
    mybatis-plus 很舒服,简单 SQL 直接条件构造就完事了,复杂 SQL 丢 XML 里,谁来都能维护,甚至不需要懂 Java
    dbpe
        104
    dbpe  
       2023-04-13 14:34:16 +08:00   ❤️ 1
    ebean 因为有 oracle 的需求..导致上不了 jooq..复杂查询在用 mybatis...(如果升到了 17...mybatis 我准备去掉他
    BenX
        105
    BenX  
       2023-04-13 14:38:10 +08:00
    Java 圈毒瘤
    Leviathann
        106
    Leviathann  
       2023-04-13 14:45:24 +08:00
    @lanlanye mybatis 所谓的新,和 go ( goroutine 以外的部分)所谓的新是一个意思
    yifeng33
        107
    yifeng33  
       2023-04-13 14:57:31 +08:00
    前司某里用的 mybatis ,现在用的 jpa 。感觉写复杂查询 jpa 比较累人,比如多表联查
    Richared
        108
    Richared  
       2023-04-13 15:02:39 +08:00
    @yifeng33 整不明白别用 jpa 级联查询,一个 byid 能让其他人崩溃。无脑吹 jpa 的都是玩具项目的玩具人。没有最好只有适合。
    wenyuan5
        109
    wenyuan5  
       2023-04-13 15:07:44 +08:00
    cheng6563
        110
    cheng6563  
       2023-04-13 15:11:41 +08:00
    Java 语言本身的表达能力本来就一坨,SQL 也是个极为拧巴的语言。用“Java 代码自动转 SQL”的方式来操作数据库有多别扭可想而知。
    最好的方法还是自己处理好 SQL 喂给数据库,所以需要一个对 SQL 优化的模板引擎,那就是 Mybatis(-plus)了。当然,Mybatis 同类更优雅的库也有,但也拉不开大差距,而且 Mybatis(-plus)用的多好招人,那就选 Mybatis(-plus)咯。
    shyangs
        111
    shyangs  
       2023-04-13 15:22:59 +08:00   ❤️ 2
    @Richared

    Spring Data JPA 是商業公司出的項目。我相信 Spring 的眼光。一些玩具項目,像阿里巴巴的 Fastjson 吹上天,Spring 也只會內建 Jackson ,不會推薦玩具項目的。
    lanlanye
        112
    lanlanye  
       2023-04-13 15:33:51 +08:00
    @xiaocaiji111 #98 ORM 一般会提供只生成 SQL 不实际执行的功能,以供人在关键的地方编写测试来确保生成的 SQL 是正确的。不过这样的话就和手写 SQL 没什么区别了,所以如果追求每个 SQL 都测的话用 ORM 就没什么特别的优势,反过来说,不需要每个都测时它挺有用的。
    Huelse
        113
    Huelse  
       2023-04-13 15:52:33 +08:00
    @ysq 如果你没接触过当然会觉得不清晰,而且 orm 和纯 sql 的讨论极易引战,就不过多讨论了
    astkaasa
        114
    astkaasa  
       2023-04-13 15:54:33 +08:00
    spring data jdbc 很好用, 可以复用老代码的 xml
    amwyyyy
        115
    amwyyyy  
       2023-04-13 16:13:51 +08:00
    @sqmwin 偷懒省事,早点下班
    zoharSoul
        116
    zoharSoul  
       2023-04-13 16:25:17 +08:00
    @Huelse #95 太复杂了. 感觉没 sql 好看懂
    dog82
        117
    dog82  
       2023-04-13 16:48:28 +08:00
    在 hibernate 里写 hql 就是脱裤子放屁,不如直接 sql 梭哈
    witcherhope
        118
    witcherhope  
       2023-04-13 18:02:06 +08:00
    @Huelse #113 但是相比 Mybatis 这种 Raw SQL ,即使没接触过框架,应该也能立马理解上手,这也算事优势吧,低协作成本;再者 SQL 本身就是面向过程的思想,强行用 Java 的 OOP 硬套就显得有点拧巴。
    zhengzhongzhao
        119
    zhengzhongzhao  
       2023-04-13 21:28:11 +08:00
    @zero47 最讨厌 sql 了,您的意思是?
    outerws
        120
    outerws  
       2023-04-14 02:44:29 +08:00
    楼上一个个都在脱裤子放屁,成熟的大并发服务下为什么阿里京东采用 mybatis ?因为它能撑得住流量经得住考验是成熟架构技术,一堆技术哪个不能开发业务逻辑?又有哪几个能支撑得住业务流量?不考虑流量我都按 10 并发来做还搞什么技术啊?一个数据库打遍天下得了
    e7
        121
    e7  
       2023-04-14 09:36:51 +08:00
    不要以为大厂会紧跟新技术,稳定才是第一位的
    MonkeyCoder
        122
    MonkeyCoder  
       2023-04-14 10:33:47 +08:00
    mybatis plus 用代码生成直接把 xml 的 CRUD 就搞定了有什么麻烦,剩下复杂的多条件查询和多表联查这些操作搭配 mybatis coder helper 插件很方便啊.不习惯把 sql 写到代码里
    Aresxue
        123
    Aresxue  
       2023-04-14 10:35:53 +08:00
    mybatis plus 做二开,java 对于 sql 这块目前没看到很好的管理方式,orm 框架在中型系统里面就开始捉襟见肘了,真的使用下来说实话用 xml 维护 sql 竟然还是目前综合性最好的方式( xml 的描述能力真的很强大),只是说 xml 在可读性上真的不好,针对这一点可以自己用别的协议重写这一部分,但 mybatis 本身也足够简洁了建议换个皮就行了,从 XXX.xml 换成 XXX.sql 把原先 xml 中的信息冗余消灭一下,但 xml 中绝大多数内容还是 sql 本身所以可优化的空间也很有限。sql 目前在编程语言里最好的实践感觉是 linq ,但 jvm 不支持动态编译函数所以没法抄作业。
    PVXLL
        124
    PVXLL  
       2023-04-14 12:31:11 +08:00
    @Richared 什么级别的项目才不算是玩具项目,工作这么久一直 jpa ,没觉得有什么问题。
    Richared
        125
    Richared  
       2023-04-14 17:20:04 +08:00
    @PVXLL 就问你最简单的问题,一对多一对一,级联查询怎么搞的。
    chiyagao
        126
    chiyagao  
       2023-04-14 17:28:43 +08:00
    看完后大家的评论,我感觉我是低级程序员。。。
    PVXLL
        127
    PVXLL  
       2023-04-14 20:07:08 +08:00 via iPhone
    @Richared 如果你连这么基础的东西都写出不来,还是写你的 mybaties 吧
    Richared
        128
    Richared  
       2023-04-17 11:55:50 +08:00
    @PVXLL 单走一个 6 ,孩子好好学习吧。别天天写个 demo 就出来装逼
    PVXLL
        129
    PVXLL  
       2023-04-17 12:26:26 +08:00 via iPhone
    @Richared 像你这种菜鸡 onetomany manytoone 都搞不懂的菜鸡不配和我讨论,乖乖面向你的 sql 编程,别出来丢人了
    leatomic
        130
    leatomic  
       2023-04-18 13:45:35 +08:00
    @Richared 其实你大可直接一点,说说什么业务才不算你们口中的 demo 项目的,然后贴具体涉及的实体(关系描述就行),以及需要搞定的需求。包括你要吐槽的点,是实现不了,还是按你们的理解只能如何实现怎么个麻烦法,还是怎么个不优雅法。
    Richared
        131
    Richared  
       2023-04-19 15:54:07 +08:00
    @leatomic 我说的很明白了,就很简单一对多。我有 10 个数据源,每个数据源有 100 张表。每张表平均 10 个字段,实体有数据源,表元数据,字段信息。我 selectby 数据源 id 。
    leatomic
        132
    leatomic  
       2023-04-20 02:27:46 +08:00
    @Richared 嗯,然后重点呢?“包括你要吐槽的点,是实现不了,还是按你们的理解只能如何实现怎么个麻烦法,还是怎么个不优雅法。”
    Richared
        133
    Richared  
       2023-04-20 10:24:57 +08:00
    @leatomic 写法重要么?当我只查数据源信息,或者需要此数据源下的所有表的元数据,或者需要查到表的字段。还没发现问题么?
    leatomic
        134
    leatomic  
       2023-04-20 11:50:57 +08:00
    @Richared 这是你的需求是吧,那你要吐槽的点呢?是无法实现只提取必要的属性节点的吧?
    如果是。把查询和命令区分开来,这种查询使用 EntityGraph 应该能解决才对,能说说怎么无法实现你的点在哪吗?当然实际开发中会使用 Spring ,结合其提供的 @EntityGraph 使用更方便;
    鉴于你的查询条件单纯用 ById ,像 CriteriaQuery 、结合 QueryDSL 就没必要提了,如果不要求将结果组装成实体类型的,要返回 Projection 的话,无论 JPA(Hibernate)还是 Spring 也都有提供相关的支持的。
    bthulu
        135
    bthulu  
       2023-04-23 14:59:19 +08:00
    @suyabgaran 我司全是 oracle, 也有免费的 jooq 用么
    leatomic
        136
    leatomic  
       2023-04-25 11:47:47 +08:00
    @Richared 兄弟,你要吐槽的到底啥呀?你不回我的话我是不是就可以理解为是想装死了?
    Richared
        137
    Richared  
       2023-04-25 15:44:15 +08:00
    @leatomic 你以为上班就是刷 v2ex? 1.当我 selectbyid 的时候,不是所有水平的开发都明白 jpa 选择需要查询的子集,但是他们知道 sql 怎么写。2.当你发现一个 selctbyid 查询返回 50w 行的时候,而且是屎山让你优化的时候,你就知道 jpa 能不用就别用,自己用可以。别人没人管你这个 byid 查的是啥,我需要啥就往里 @OneToMany ,管你需要啥,反正不少就不会报错。我完成我的任务就 ok 了
    leatomic
        138
    leatomic  
       2023-04-25 19:40:30 +08:00
    @Richared 上次回复是 5 天前了呀!当然你回我了就无所谓了。后面的感觉辩下去没意义了,就这样吧
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2210 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 15:42 · PVG 23:42 · LAX 08:42 · JFK 11:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.