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

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

  •  
  •   Lnanvily · 9 天前 · 3215 次点击

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

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

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

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

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

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


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

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