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

老哥们好,关于 Java ORM 选型的问题,有问题请教

  •  
  •   Lnanvily · 157 天前 · 4224 次点击
    这是一个创建于 157 天前的主题,其中的信息可能已经有所发展或是发生改变。

    小弟是新人上路,正在使用 SpringCloud 进行一个娱乐直播平台小项目的练手开发,在选择 ORM 框架时看到大家的争论有点摸不清头脑。

    TLDR:

    小弟进行练手开发是为了尽快提高到能进入企业熟练打杂的水平,但是因不知道目前企业主流的方案而感到困扰,希望大佬们能指点一下 ORM 选型,小弟感激不尽
    

    背景:

    目前试用了 Mybatis+ MybatisPlus/tk.mapper/mybatis-mapper 几种方案 其中最有意向的时 Mybatis+Mybatis Plus 的方案,使用 mybatis 的 XML 写一些比较复杂的查询,用 MP 的 QueryWrapper 进行一些简单的查询。

    tk.mapper/mybatis-mapper 用起来似乎与 quweryWrapper 区别不大,但写起来略感麻烦,不是很倾向使用 其他的 mybatis 方案如 fluent-mybatis,mybatis-flex 更是看的小弟眼花缭乱,这些框架的支持者都各有各的说辞,实在难以分辨

    除 Mybatis 之外,小弟还注意到有 JPA+hibernate,以及 QueryDSL 等等五花八门的方案,各方的支持者也是你不让我我不让你

    额外请求

    打听到的公司目前使用的技术包括 SpringCloud,k8s,elasticSearch,kafka 等,各位大佬能否提供一些学习建议,小弟感激不尽。
    
    47 条回复    2024-07-06 18:10:17 +08:00
    lsk569937453
        1
    lsk569937453  
       157 天前   ❤️ 1
    Mybatis+Mybatis Plus 无脑用这个方案就行了,使用量大,碰到的问题网上基本都有答案。
    Stevenv
        2
    Stevenv  
       157 天前
    Mybatis Plus 就成。国内主流。
    我现在在用 JPA 也挺舒服
    ByteCat
        3
    ByteCat  
       157 天前
    选哪个都行,挑个自己喜欢的就好了。
    一般的公司用 MyBatis 系( MyBatisPlus 之类)
    我自己项目用 JPA ,现在换 JOOQ 了,更爽
    0xD800
        4
    0xD800  
       157 天前
    mybatis-mapper 的 wrapper 比 mp 的 Lambda 好用一点,mp 的 lambda 还需要传类型才能获取到类型提示,mybatis-mapper 直接.wrapper().eq(getXXX, vv)就可以获得到类型提示。不过 mybatis-mapper 有一些功能要自己实现比如自动设置 createBy 、乐观锁字段,这些都有解决方案,可以加新版 mapper 群讨论
    cheng6563
        5
    cheng6563  
       157 天前
    Mybatis Plus 就行了,用的很广。

    jpa 这类硬 orm 国内用的少,用起来稍微复杂一点的查询就非常蛋疼
    shanai
        6
    shanai  
       157 天前
    jpa + querydsl 配合有 QuerydslPredicateExecutor 可以做到不写 sql 用起来还是比较爽的
    shanai
        7
    shanai  
       157 天前
    @shanai 不过这个不是主流
    txzh007
        8
    txzh007  
       157 天前
    看数据库怎么设计了.mp 最大的问题就是写 wrapper 会把数据库属性字段写到业务代码中,个人还是更喜欢 jpa
    issakchill
        9
    issakchill  
       157 天前
    无脑 mp 吧
    northernsongy2
        10
    northernsongy2  
       157 天前
    如果是学习为目的,那么看眼缘选一个,然后深入学学源码,如果是公司要求,那么就跟公司走
    jlkm2010
        11
    jlkm2010  
       157 天前
    Mybatis+Mybatis Plus ,或者 BeetlSQL
    Ayanokouji
        12
    Ayanokouji  
       157 天前
    推荐个小众框架 https://ebean.io
    nothingistrue
        13
    nothingistrue  
       157 天前
    选型是架构师(或者个人开发者)干得,并且是只在项目开工或重构期间才干的活,搬转码农就不要去想了。

    新搬转的水平,九成九取决于过往搬转的经验和那期间对经验的总结和学习,非搬转期间的自学、实练什么的,(仅限对于将来搬转的影响)不能说毫无作用,只能说没啥卵用。

    如果是纯粹的学习,那就无脑跟着 spring.io 以及它使用的第三方框架学。其他五花八门的方案,都只是工具,只有 Spring 体系是课程。
    final7genesis
        14
    final7genesis  
       157 天前
    mybatis plus 关联查询还是要写 sql 吧,jpa 配置下 onetomany manytomany 啥的 关联查询也不用写 sql
    hdfg159
        15
    hdfg159  
       157 天前 via iPhone
    无脑 mbp ,国内主流
    zhenglinsmile
        16
    zhenglinsmile  
       157 天前
    第一次用 JPA 最近发现某几个表 明明只进行了一次修改 entity 也只有一次修改 但是看 sql 日志 就是被多更新了 5 次 目前还没找到原因…
    xmtpw
        17
    xmtpw  
       157 天前
    @Ayanokouji 看了下文档还不错啊,老哥稳
    9c04C5dO01Sw5DNL
        18
    9c04C5dO01Sw5DNL  
       157 天前
    Mybatis Plus 就行了,不要把时间浪费在这些 crud 框架上。终其一生也写不了多少 crud
    Lnanvily
        19
    Lnanvily  
    OP
       156 天前
    非常感谢大佬们的指点,正在全力开码中...
    dasbn
        20
    dasbn  
       156 天前   ❤️ 1
    ZeroDu
        21
    ZeroDu  
       156 天前
    搬砖多年的告诉你:直接选 Mybatis Plus 就好,要联查的话:有基于 mp 扩展的 Mybatis Plus join 。还有建议使用 Lambda 开头的各种 Wrapper 。
    ZeroDu
        22
    ZeroDu  
       156 天前
    @dasbn #20
    https://baomidou.com/reference/about-cve/

    其实这个就是之前官方文档没说明普通 wapper 和 lambda 的区别, 没说明风险。
    wlm201219
        23
    wlm201219  
       156 天前
    新手直接 Mybatis Plus
    楼主明显是自己练习,想要快点能工作
    在国内基本只有 mybatis 系可以选
    不要推荐 jpa 了,国内没有水平可以的教程不说,学习难度远大于 mybatis ,企业也基本不用,学了基本没用
    wanqiangcrack
        24
    wanqiangcrack  
       156 天前
    自己玩随意,团队开发选择使用量大的。
    dbpe
        25
    dbpe  
       156 天前
    大环境是 mp..那就 mp 咯...毕竟很多人还是喜欢用 sql 写业务。(有些用 sql 的确简单很多)

    至于 Ebean 、JOOQ 、QueryDSL 这些东西,都是歪门邪道,让我们自己爽就好了。。


    PS: 没事多看看也是好的。。有时候我看到一些 mybats 增强,怎么看怎么都是往 jpa 那边靠,导致不伦不类的。(哎)
    murmur
        26
    murmur  
       156 天前
    @dasbn 我感觉没问题,数据库的列还允许前端传入,前端传入的参数还不校验,然后甩锅给框架,这样的人还是开掉比较好

    做后端第一件事不就是不能相信前端的任何参数么
    ExplodingFKL
        27
    ExplodingFKL  
       156 天前
    如果是个人的话想用啥就用啥咯,就算是 jetbrains 的 exposed 也不是不能用
    wetalk
        28
    wetalk  
       156 天前
    你也不想在 Java 代码中拼接复杂 SQL 吧
    wqhui
        29
    wqhui  
       156 天前
    @zhenglinsmile jpa 会管理 entity 实体,印象中是个叫生命周期管理之类的东西。如果你应用内存中的 entity 对象带有主键,比如执行 save 或者 select 出来,然后直接改 entity 内容,修改内容会自动同步到数据库,不需要显式调用更新保存
    zhenjiachen
        30
    zhenjiachen  
       156 天前 via iPhone
    @dbpe 赞同,还不如直接 jpa 加 querydsl ,jooq 也可以但是低半版本数据库收费
    jorneyr
        31
    jorneyr  
       156 天前
    推荐要么 MyBatis ,要么 JPA ,纯粹一些。
    NikoXu
        32
    NikoXu  
       156 天前   ❤️ 1
    springdata Jpa + querydsl
    JoJoWuBeHumble
        33
    JoJoWuBeHumble  
       156 天前
    找工作就是无脑 MP ,百分之八十以上的公司都是 MP 。
    上家公司用的是 JPA ,问题数据库设计一泡污,导致 JPA 用起来非常不顺手,对新技术又抵触,不愿意引入 querydsl 。
    JoJoWuBeHumble
        34
    JoJoWuBeHumble  
       156 天前
    而且你不需要纠结到底是 JPA 还是 MP ,现在 MP 反而不少功能在往 JPA 上面靠。最重要的是 SQL 能写明白就好了
    limyel
        35
    limyel  
       156 天前
    mybatis plus +1 ,至于 jpa 用到了再学,国内很多厂商的习惯是会自己封装一套 jpa 的查询接口...
    kratosmy
        36
    kratosmy  
       156 天前
    目前用的是 JPA ,但是一个方法名太长了。。
    yeyang5211
        37
    yeyang5211  
       156 天前
    mybatis plus +1 , 简单好用 适用面广
    Richared
        38
    Richared  
       156 天前
    自己用用 jpa 。如果公司用尽量别用 jpa ,到时候用着用着 selectbyid 就变成扫全部关联表了。
    kenvix
        39
    kenvix  
       156 天前
    直接上 jOOQ 。别给自己添堵
    ychost
        40
    ychost  
       156 天前
    如果是 Java 那么直接 MBP 就好了,用的人多坑少,如果用 Kotlin 那么建议 Ktorm 用起来比各种 Java 的 ORM 都爽太多,JOOQ 也好、JPA 也好只要是基于 Java 的那么没有语法糖加持都写起来怪怪的
    Goooooos
        41
    Goooooos  
       156 天前
    小项目 jdbctemplate ,直接写 sql
    zhenglinsmile
        42
    zhenglinsmile  
       156 天前
    @wqhui 确实应该是这个问题 不过我之前排查了代码 除了处理业务那块 其它地方没有定位到对 entity 的修改位置 只能等后面闲了继续查查…
    codingmiao
        43
    codingmiao  
       155 天前
    @dasbn 我觉得 Mybatis Plus 作者喷得对,允许传 sql 片段在纯后端用带来很大的灵活性,而且自己可控传什么,总不能自己给自己传个注入语句。使用者自己非要把这个特性暴露给前端还不在执行前做校验( Mybatis Plus 本身也提供了 sql 注入检测的工具类),把刀子递给黑客还怪刀尖没做安全设计这不是纯纯巨婴行为。
    chuck1in
        44
    chuck1in  
       154 天前
    @Ayanokouji 之前一直在找一个轻量级的 orm 框架,想不到还真有。。。。。
    chuck1in
        45
    chuck1in  
       154 天前
    @zhenjiachen 有开源版本,支持开源数据库,是不收费的。除非你用 oracle 这些。
    zhenglinsmile
        46
    zhenglinsmile  
       154 天前
    @wqhui 最终定位到原因了,因为是创建用户,有非常多的初始化资源操作。很多地方使用了 saveAndFlush 这个方法。修改为 save 方法之后,就没有被无效更新了。
    chuliuxiang
        47
    chuliuxiang  
       138 天前
    国内一般都是 mybatis 或者 mybatis-plus ,其实单纯 mybatis+mybatis-generator 就很好用了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3045 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 13:35 · PVG 21:35 · LAX 05:35 · JFK 08:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.