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

2020-10-27 14:10:58 +08:00
 madworks
前几天用到一个生成器,vue 前端和后端一键生成,代码超级简洁,完全不用改,只是用的 jpa,但是涉及复杂的数据查询 jpa 肯定很繁琐,就想也用上 mybatis,而且发现 mybatisgenerator 稍微修改下 model 生成器源码,就可以满足 jpamybatis 共用 model 类,就是不知道这样有没有什么不好,想请教下各位童靴有没有和 mybatis 一起混用的,有没有什么隐患,注意的地方,
5936 次点击
所在节点    Java
40 条回复
ourslay
2020-10-28 08:45:56 +08:00
Spring Data JDBC 了解下 。
cheng6563
2020-10-28 08:53:23 +08:00
jpql 稍微复杂点的查询组装就恶心。
直接在 Java 里拼 SQL 也是一坨一坨的。
只能用 mybatisplus 才能解决生活的样子
yalin
2020-10-28 09:02:49 +08:00
场景需求决定技术
Blulotus
2020-10-28 09:13:53 +08:00
分开用没问题,但一个方法里面同时用 jpa 和 mybatis 发现有问题,就弃用 jpa 了。。问题为:业务调用的逻辑大概为 jpa,mybatis,jpa,但打印 sql 执行的顺序为 jpa,jpa,mybatis,反正就不是按业务的逻辑来执行的,不知道啥原因,都换成 myabtis 就不会。
pengyOne
2020-10-28 09:31:27 +08:00
用 mybatis-plus 吧,也提供 jpa 的那些简单操作
Jrue0011
2020-10-28 10:02:46 +08:00
21 楼+1,一起用的话可以试试 Spring Data JDBC,官方文档里有一节就是集成 mybatis
xuanbg
2020-10-28 10:06:52 +08:00
一起用没啥问题,反正各管各的也不会打架,能有什么问题?
Jrue0011
2020-10-28 10:09:02 +08:00
@Jrue0011 不过 Spring Data JDBC 和 JPA 应该是不一样的,只是功能上和 data jpa 有一定的相似
aragakiyuii
2020-10-28 10:50:31 +08:00
@Blulotus #24 如果 jpa 不主动 flush 的话,会在整个事务结束末尾一起提交...
aragakiyuii
2020-10-28 10:52:38 +08:00
@Blulotus #24 这个是 hibernate 的特性,它自己是有一套对于 entity 管理的生命周期,而 mybatis 更倾向于“原生”...
pkupyx
2020-10-28 10:56:17 +08:00
之前 mybatis plus 的 generator 生成的 entity 似乎并不是标准 jpa 规范,现在好些了嘛
gundam0603
2020-10-28 11:08:55 +08:00
@Blulotus jpa 会重排,里面的顺序是 jpa 管理的,当然管不了 mybatis 的,而且可能不在一个事务,建议是 mybatis 只用来做复杂查询,JPA 更新是什么的,而且不能混用。
gundam0603
2020-10-28 11:12:33 +08:00
7,8 年前就这么用了,没大问题,注意别同事务里混着用就行,其实两个现在来讲可能也没那么大差别了。
anakinsky
2020-10-28 11:26:16 +08:00
个人倾向于 jpa + querydsl 能解决绝大部分的复杂查询,实在不行用 jdbcTemplate ;代码生成也可以使用 IDEA+groovy 脚本,两种一起不是提升了项目复杂度,一堆 mapper 又是一堆 repository
Blulotus
2020-10-28 11:27:14 +08:00
@aragakiyuii 原来是这样,感谢!
Blulotus
2020-10-28 11:29:26 +08:00
@gundam0603 明白原因了,感谢解答!
madworks
2020-10-28 11:30:06 +08:00
@pkupyx entity 类可以自己写个插件生成的,想怎么改怎么改
madworks
2020-10-28 11:40:31 +08:00
@gundam0603 你是说 jpa 对数据库的操作会重排吗
gundam0603
2020-10-29 13:12:48 +08:00
@madworks 记得会在事务提交的时候改变提交的顺序
redcoffeecat
2021-05-26 10:16:59 +08:00
@qwerthhusn t 腾讯都在用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/719020

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX