madworks
V2EX  ›  Java

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

  •  
  •   madworks · Oct 27, 2020 · 7863 views
    This topic created in 2199 days ago, the information mentioned may be changed or developed.
    前几天用到一个生成器,vue 前端和后端一键生成,代码超级简洁,完全不用改,只是用的 jpa,但是涉及复杂的数据查询 jpa 肯定很繁琐,就想也用上 mybatis,而且发现 mybatisgenerator 稍微修改下 model 生成器源码,就可以满足 jpamybatis 共用 model 类,就是不知道这样有没有什么不好,想请教下各位童靴有没有和 mybatis 一起混用的,有没有什么隐患,注意的地方,
    40 replies  •  2021-05-26 10:16:59 +08:00
    echo1937
    echo1937
    Oct 27, 2020
    1
    我就是这么用的.
    lori01
    lori01
    Oct 27, 2020
    2
    我的博客网站也是这么用的,jpa 真的省掉了很多 sql 编写,复杂的不能用 jpa 的就用 mybaits,很方便,效率非常高
    wysnylc
    wysnylc
    Oct 27, 2020
    3
    Mybatis 用 tkmapper 可以不需要 MybatisGenerator 生成 xml 和 entity 而使用 Example,减少代码污染
    THESDZ
    THESDZ
    Oct 27, 2020
    4
    问题不大,注意的地方就是后续维护,表(实体)改动的时候两个地方都要改
    guoyuchuan
    guoyuchuan
    Oct 27, 2020
    5
    目前我们公司就是 hibernate 和 mybatis 两者结合使用:
    操作数据使用 hibernate ;
    查询使用 mybatis

    问题:
    目前还没遇到问题,估计是我才接触这个项目吧。。。
    madworks
    madworks
    OP
    Oct 27, 2020
    6
    @guoyuchuan 为什么查询用 mybatis,操作用 hibernate ?难道不是反过来用的吗
    wr516516
    wr516516
    Oct 27, 2020
    7
    @madworks 查询用 mybatis 不是方便 sql 优化吗
    guoyuchuan
    guoyuchuan
    Oct 27, 2020
    8
    @madworks #6 这个我也不知道高层的想法。。。我只是个搬砖的。。。
    yiyi11
    yiyi11
    Oct 27, 2020 via Android❤️2
    9
    隐患就是没有意识到 mybatisplus 可以替代它们。
    madworks
    madworks
    OP
    Oct 27, 2020
    10
    @wysnylc entity 也可以不用写?
    madworks
    madworks
    OP
    Oct 27, 2020
    11
    @THESDZ jpa 和 mybatis 共用一个 model 啊,就是比较头疼 id
    madworks
    madworks
    OP
    Oct 27, 2020
    12
    @yiyi11 是真的吗
    wysnylc
    wysnylc
    Oct 27, 2020
    13
    @madworks #10 不需要,tkmapper 对比 MybatisGenerator 对代码的侵入非常低,配置也非常简单
    qwerthhusn
    qwerthhusn
    Oct 27, 2020❤️1
    14
    其实最大的问题就是事务了,假如一个比较复杂的业务同时用了 JPA 和 MyBatis,Spring 的 @Transactional 能不能包的住。。
    然后还有 MyBatis-plus,这玩意挺好用的,增删改查,只要不是复杂的表达式啥的,都不用写 xml,直接代码搞定。但是 MyBatis-plus 这种个人开发出来的东西,自己的小项目用用没问题,公司的项目的话感觉还是别用的好
    EminemW
    EminemW
    Oct 27, 2020
    15
    jpa 不也能写 sql 么
    raullf
    raullf
    Oct 27, 2020 via iPhone
    16
    前端后端生成器是啥
    zzl22100048
    zzl22100048
    Oct 27, 2020 via iPhone
    17
    jpa+querydsl 就够了吧,mybatis 太难维护了
    taogen
    taogen
    Oct 27, 2020
    18
    mybatis plus 不香吗
    jdi
    jdi
    Oct 28, 2020 via Android
    19
    mybatisplus = mybatis+jpa 。
    不过我比较好奇生成器是什么(*´∀`)
    Kirsk
    Kirsk
    Oct 28, 2020 via Android
    20
    其实蛮多地方功能相似 少部分用 mybatis 多表确实有些优势 不过 mapper 一套下来 确实没有 jpa 方便 复杂查询封装下 spec 还是看自身业务场景吧
    ourslay
    ourslay
    Oct 28, 2020 via iPhone❤️1
    21
    Spring Data JDBC 了解下 。
    cheng6563
    cheng6563
    Oct 28, 2020 via Android
    22
    jpql 稍微复杂点的查询组装就恶心。
    直接在 Java 里拼 SQL 也是一坨一坨的。
    只能用 mybatisplus 才能解决生活的样子
    yalin
    yalin
    Oct 28, 2020
    23
    场景需求决定技术
    Blulotus
    Blulotus
    Oct 28, 2020
    24
    分开用没问题,但一个方法里面同时用 jpa 和 mybatis 发现有问题,就弃用 jpa 了。。问题为:业务调用的逻辑大概为 jpa,mybatis,jpa,但打印 sql 执行的顺序为 jpa,jpa,mybatis,反正就不是按业务的逻辑来执行的,不知道啥原因,都换成 myabtis 就不会。
    pengyOne
    pengyOne
    Oct 28, 2020
    25
    用 mybatis-plus 吧,也提供 jpa 的那些简单操作
    Jrue0011
    Jrue0011
    Oct 28, 2020
    26
    21 楼+1,一起用的话可以试试 Spring Data JDBC,官方文档里有一节就是集成 mybatis
    xuanbg
    xuanbg
    Oct 28, 2020
    27
    一起用没啥问题,反正各管各的也不会打架,能有什么问题?
    Jrue0011
    Jrue0011
    Oct 28, 2020
    28
    @Jrue0011 不过 Spring Data JDBC 和 JPA 应该是不一样的,只是功能上和 data jpa 有一定的相似
    aragakiyuii
    aragakiyuii
    Oct 28, 2020 via iPhone
    29
    @Blulotus #24 如果 jpa 不主动 flush 的话,会在整个事务结束末尾一起提交...
    aragakiyuii
    aragakiyuii
    Oct 28, 2020 via iPhone
    30
    @Blulotus #24 这个是 hibernate 的特性,它自己是有一套对于 entity 管理的生命周期,而 mybatis 更倾向于“原生”...
    pkupyx
    pkupyx
    Oct 28, 2020
    31
    之前 mybatis plus 的 generator 生成的 entity 似乎并不是标准 jpa 规范,现在好些了嘛
    gundam0603
    gundam0603
    Oct 28, 2020
    32
    @Blulotus jpa 会重排,里面的顺序是 jpa 管理的,当然管不了 mybatis 的,而且可能不在一个事务,建议是 mybatis 只用来做复杂查询,JPA 更新是什么的,而且不能混用。
    gundam0603
    gundam0603
    Oct 28, 2020
    33
    7,8 年前就这么用了,没大问题,注意别同事务里混着用就行,其实两个现在来讲可能也没那么大差别了。
    anakinsky
    anakinsky
    Oct 28, 2020
    34
    个人倾向于 jpa + querydsl 能解决绝大部分的复杂查询,实在不行用 jdbcTemplate ;代码生成也可以使用 IDEA+groovy 脚本,两种一起不是提升了项目复杂度,一堆 mapper 又是一堆 repository
    Blulotus
    Blulotus
    Oct 28, 2020
    35
    @aragakiyuii 原来是这样,感谢!
    Blulotus
    Blulotus
    Oct 28, 2020
    36
    @gundam0603 明白原因了,感谢解答!
    madworks
    madworks
    OP
    Oct 28, 2020
    37
    @pkupyx entity 类可以自己写个插件生成的,想怎么改怎么改
    madworks
    madworks
    OP
    Oct 28, 2020
    38
    @gundam0603 你是说 jpa 对数据库的操作会重排吗
    gundam0603
    gundam0603
    Oct 29, 2020
    39
    @madworks 记得会在事务提交的时候改变提交的顺序
    redcoffeecat
    redcoffeecat
    May 26, 2021
    40
    @qwerthhusn t 腾讯都在用
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1514 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 90ms · UTC 18:14 · PVG 02:14 · LAX 10:14 · JFK 13:14
    ♥ Do have faith in what you're doing.