各位大佬, jpa 和 mybatis 一起用符合设计吗,有哪些隐患 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
madworks
V2EX    Java

各位大佬, jpa 和 mybatis 一起用符合设计吗,有哪些隐患

  •  
  •   madworks 2020-10-27 14:10:58 +08:00 6778 次点击
    这是一个创建于 1880 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前几天用到一个生成器,vue 前端和后端一键生成,代码超级简洁,完全不用改,只是用的 jpa,但是涉及复杂的数据查询 jpa 肯定很繁琐,就想也用上 mybatis,而且发现 mybatisgenerator 稍微修改下 model 生成器源码,就可以满足 jpamybatis 共用 model 类,就是不知道这样有没有什么不好,想请教下各位童靴有没有和 mybatis 一起混用的,有没有什么隐患,注意的地方,
    40 条回复    2021-05-26 10:16:59 +08:00
    echo1937
        1
    echo1937  
       2020-10-27 14:14:50 +08:00
    我就是这么用的.
    lori01
        2
    lori01  
       2020-10-27 14:16:59 +08:00
    我的博客网站也是这么用的,jpa 真的省掉了很多 sql 编写,复杂的不能用 jpa 的就用 mybaits,很方便,效率非常高
    wysnylc
        3
    wysnylc  
       2020-10-27 14:32:41 +08:00
    Mybatis 用 tkmapper 可以不需要 MybatisGenerator 生成 xml 和 entity 而使用 Example,减少代码污染
    THESDZ
        4
    THESDZ  
       2020-10-27 14:37:03 +08:00
    问题不大,注意的地方就是后续维护,表(实体)改动的时候两个地方都要改
    guoyuchuan
        5
    guoyuchuan  
       2020-10-27 14:39:18 +08:00
    目前我们公司就是 hibernate 和 mybatis 两者结合使用:
    操作数据使用 hibernate ;
    查询使用 mybatis

    问题:
    目前还没遇到问题,估计是我才接触这个项目吧。。。
    madworks
        6
    madworks  
    OP
       2020-10-27 14:40:49 +08:00
    @guoyuchuan 为什么查询用 mybatis,操作用 hibernate ?难道不是反过来用的吗
    wr516516
        7
    wr516516  
       2020-10-27 14:46:11 +08:00
    @madworks 查询用 mybatis 不是方便 sql 优化吗
    guoyuchuan
        8
    guoyuchuan  
       2020-10-27 14:46:39 +08:00
    @madworks #6 这个我也不知道高层的想法。。。我只是个搬砖的。。。
    yiyi11
        9
    yiyi11  
       2020-10-27 18:13:50 +08:00 via Android   2
    隐患就是没有意识到 mybatisplus 可以替代它们。
    madworks
        10
    madworks  
    OP
       2020-10-27 18:15:38 +08:00
    @wysnylc entity 也可以不用写?
    madworks
        11
    madworks  
    OP
       2020-10-27 18:16:21 +08:00
    @THESDZ jpa 和 mybatis 共用一个 model 啊,就是比较头疼 id
    madworks
        12
    madworks  
    OP
       2020-10-27 18:16:40 +08:00
    @yiyi11 是真的吗
    wysnylc
        13
    wysnylc  
       2020-10-27 18:22:32 +08:00
    @madworks #10 不需要,tkmapper 对比 MybatisGenerator 对代码的侵入非常低,配置也非常简单
    qwerthhusn
        14
    qwerthhusn  
       2020-10-27 18:33:40 +08:00   1
    其实最大的问题就是事务了,假如一个比较复杂的业务同时用了 JPA 和 MyBatis,Spring 的 @Transactional 能不能包的住。。
    然后还有 MyBatis-plus,这玩意挺好用的,增删改查,只要不是复杂的表达式啥的,都不用写 xml,直接代码搞定。但是 MyBatis-plus 这种个人开发出来的东西,自己的小项目用用没问题,公司的项目的话感觉还是别用的好
    EminemW
        15
    EminemW  
       2020-10-27 22:31:55 +08:00
    jpa 不也能写 sql 么
    raullf
        16
    raullf  
       2020-10-27 22:43:02 +08:00 via iPhone
    前端后端生成器是啥
    zzl22100048
        17
    zzl22100048  
       2020-10-27 23:24:51 +08:00 via iPhone
    jpa+querydsl 就够了吧,mybatis 太难维护了
    taogen
        18
    taogen  
       2020-10-27 23:29:41 +08:00
    mybatis plus 不香吗
    jdi
        19
    jdi  
       2020-10-28 00:01:29 +08:00 via Android
    mybatisplus = mybatis+jpa 。
    不过我比较好奇生成器是什么(*`)
    Kirsk
        20
    Kirsk  
       2020-10-28 00:43:14 +08:00 via Android
    其实蛮多地方功能相似 少部分用 mybatis 多表确实有些优势 不过 mapper 一套下来 确实没有 jpa 方便 复杂查询封装下 spec 还是看自身业务场景吧
    ourslay
        21
    ourslay  
       2020-10-28 08:45:56 +08:00 via iPhone   1
    Spring Data JDBC 了解下 。
    cheng6563
        22
    cheng6563  
       2020-10-28 08:53:23 +08:00 via Android
    jpql 稍微复杂点的查询组装就恶心。
    直接在 Java 里拼 QL 也是一坨一坨的。
    只能用 mybatisplus 才能解决生活的样子
    yalin
        23
    yalin  
       2020-10-28 09:02:49 +08:00
    场景需求决定技术
    Blulotus
        24
    Blulotus  
       2020-10-28 09:13:53 +08:00
    分开用没问题,但一个方法里面同时用 jpa 和 mybatis 发现有问题,就弃用 jpa 了。。问题为:业务调用的逻辑大概为 jpa,mybatis,jpa,但打印 sql 执行的顺序为 jpa,jpa,mybatis,反正就不是按业务的逻辑来执行的,不知道啥原因,都换成 myabtis 就不会。
    pengyOne
        25
    pengyOne  
       2020-10-28 09:31:27 +08:00
    用 mybatis-plus 吧,也提供 jpa 的那些简单操作
    Jrue0011
        26
    Jrue0011  
       2020-10-28 10:02:46 +08:00
    21 楼+1,一起用的话可以试试 Spring Data JDBC,官方文档里有一节就是集成 mybatis
    xuanbg
        27
    xuanbg  
       2020-10-28 10:06:52 +08:00
    一起用没啥问题,反正各管各的也不会打架,能有什么问题?
    Jrue0011
        28
    Jrue0011  
       2020-10-28 10:09:02 +08:00
    @Jrue0011 不过 Spring Data JDBC 和 JPA 应该是不一样的,只是功能上和 data jpa 有一定的相似
    aragakiyuii
        29
    aragakiyuii  
       2020-10-28 10:50:31 +08:00 via iPhone
    @Blulotus #24 如果 jpa 不主动 flush 的话,会在整个事务结束末尾一起提交...
    aragakiyuii
        30
    aragakiyuii  
       2020-10-28 10:52:38 +08:00 via iPhone
    @Blulotus #24 这个是 hibernate 的特性,它自己是有一套对于 entity 管理的生命周期,而 mybatis 更倾向于“原生”...
    pkupyx
        31
    pkupyx  
       2020-10-28 10:56:17 +08:00
    之前 mybatis plus 的 generator 生成的 entity 似乎并不是标准 jpa 规范,现在好些了嘛
    gundam0603
        32
    gundam0603  
       2020-10-28 11:08:55 +08:00
    @Blulotus jpa 会重排,里面的顺序是 jpa 管理的,当然管不了 mybatis 的,而且可能不在一个事务,建议是 mybatis 只用来做复杂查询,JPA 更新是什么的,而且不能混用。
    gundam0603
        33
    gundam0603  
       2020-10-28 11:12:33 +08:00
    7,8 年前就这么用了,没大问题,注意别同事务里混着用就行,其实两个现在来讲可能也没那么大差别了。
    anakinsky
        34
    anakinsky  
       2020-10-28 11:26:16 +08:00
    个人倾向于 jpa + querydsl 能解决绝大部分的复杂查询,实在不行用 jdbcTemplate ;代码生成也可以使用 IDEA+groovy 脚本,两种一起不是提升了项目复杂度,一堆 mapper 又是一堆 repository
    Blulotus
        35
    Blulotus  
       2020-10-28 11:27:14 +08:00
    @aragakiyuii 原来是这样,感谢!
    Blulotus
        36
    Blulotus  
       2020-10-28 11:29:26 +08:00
    @gundam0603 明白原因了,感谢解答!
    madworks
        37
    madworks  
    OP
       2020-10-28 11:30:06 +08:00
    @pkupyx entity 类可以自己写个插件生成的,想怎么改怎么改
    madworks
        38
    madworks  
    OP
       2020-10-28 11:40:31 +08:00
    @gundam0603 你是说 jpa 对数据库的操作会重排吗
    gundam0603
        39
    gundam0603  
       2020-10-29 13:12:48 +08:00
    @madworks 记得会在事务提交的时候改变提交的顺序
    redcoffeecat
        40
    redcoffeecat  
       2021-05-26 10:16:59 +08:00
    @qwerthhusn t 腾讯都在用
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2442 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 05:03 PVG 13:03 LAX 21:03 JFK 00:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86