小弟是新人上路,正在使用 SpringCloud 进行一个娱乐直播平台小项目的练手开发,在选择 ORM 框架时看到大家的争论有点摸不清头脑。
小弟进行练手开发是为了尽快提高到能进入企业熟练打杂的水平,但是因不知道目前企业主流的方案而感到困扰,希望大佬们能指点一下 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 等,各位大佬能否提供一些学习建议,小弟感激不尽。
1
lsk569937453 138 天前 1
Mybatis+Mybatis Plus 无脑用这个方案就行了,使用量大,碰到的问题网上基本都有答案。
|
2
Stevenv 138 天前
Mybatis Plus 就成。国内主流。
我现在在用 JPA 也挺舒服 |
3
ByteCat 138 天前
选哪个都行,挑个自己喜欢的就好了。
一般的公司用 MyBatis 系( MyBatisPlus 之类) 我自己项目用 JPA ,现在换 JOOQ 了,更爽 |
4
0xD800 138 天前
mybatis-mapper 的 wrapper 比 mp 的 Lambda 好用一点,mp 的 lambda 还需要传类型才能获取到类型提示,mybatis-mapper 直接.wrapper().eq(getXXX, vv)就可以获得到类型提示。不过 mybatis-mapper 有一些功能要自己实现比如自动设置 createBy 、乐观锁字段,这些都有解决方案,可以加新版 mapper 群讨论
|
5
cheng6563 138 天前
Mybatis Plus 就行了,用的很广。
jpa 这类硬 orm 国内用的少,用起来稍微复杂一点的查询就非常蛋疼 |
6
shanai 138 天前
jpa + querydsl 配合有 QuerydslPredicateExecutor 可以做到不写 sql 用起来还是比较爽的
|
8
txzh007 138 天前
看数据库怎么设计了.mp 最大的问题就是写 wrapper 会把数据库属性字段写到业务代码中,个人还是更喜欢 jpa
|
9
issakchill 138 天前
无脑 mp 吧
|
10
northernsongy2 138 天前
如果是学习为目的,那么看眼缘选一个,然后深入学学源码,如果是公司要求,那么就跟公司走
|
11
jlkm2010 138 天前
Mybatis+Mybatis Plus ,或者 BeetlSQL
|
12
Ayanokouji 138 天前
推荐个小众框架 https://ebean.io
|
13
nothingistrue 138 天前
选型是架构师(或者个人开发者)干得,并且是只在项目开工或重构期间才干的活,搬转码农就不要去想了。
新搬转的水平,九成九取决于过往搬转的经验和那期间对经验的总结和学习,非搬转期间的自学、实练什么的,(仅限对于将来搬转的影响)不能说毫无作用,只能说没啥卵用。 如果是纯粹的学习,那就无脑跟着 spring.io 以及它使用的第三方框架学。其他五花八门的方案,都只是工具,只有 Spring 体系是课程。 |
14
final7genesis 138 天前
mybatis plus 关联查询还是要写 sql 吧,jpa 配置下 onetomany manytomany 啥的 关联查询也不用写 sql
|
15
hdfg159 138 天前 via iPhone
无脑 mbp ,国内主流
|
16
zhenglinsmile 138 天前
第一次用 JPA 最近发现某几个表 明明只进行了一次修改 entity 也只有一次修改 但是看 sql 日志 就是被多更新了 5 次 目前还没找到原因…
|
17
xmtpw 137 天前
@Ayanokouji 看了下文档还不错啊,老哥稳
|
18
9c04C5dO01Sw5DNL 137 天前
Mybatis Plus 就行了,不要把时间浪费在这些 crud 框架上。终其一生也写不了多少 crud
|
19
Lnanvily OP 非常感谢大佬们的指点,正在全力开码中...
|
20
dasbn 137 天前 1
喜欢 Mybatis Plus 可以看看最近发生的:
https://github.com/baomidou/mybatis-plus/issues/6167 https://mp.weixin.qq.com/s/SGOTgpBe2IABlYY7P69Cqg |
21
ZeroDu 137 天前
搬砖多年的告诉你:直接选 Mybatis Plus 就好,要联查的话:有基于 mp 扩展的 Mybatis Plus join 。还有建议使用 Lambda 开头的各种 Wrapper 。
|
22
ZeroDu 137 天前
|
23
wlm201219 137 天前
新手直接 Mybatis Plus
楼主明显是自己练习,想要快点能工作 在国内基本只有 mybatis 系可以选 不要推荐 jpa 了,国内没有水平可以的教程不说,学习难度远大于 mybatis ,企业也基本不用,学了基本没用 |
24
wanqiangcrack 137 天前
自己玩随意,团队开发选择使用量大的。
|
25
dbpe 137 天前
大环境是 mp..那就 mp 咯...毕竟很多人还是喜欢用 sql 写业务。(有些用 sql 的确简单很多)
至于 Ebean 、JOOQ 、QueryDSL 这些东西,都是歪门邪道,让我们自己爽就好了。。 PS: 没事多看看也是好的。。有时候我看到一些 mybats 增强,怎么看怎么都是往 jpa 那边靠,导致不伦不类的。(哎) |
27
ExplodingFKL 137 天前
如果是个人的话想用啥就用啥咯,就算是 jetbrains 的 exposed 也不是不能用
|
28
wetalk 137 天前
你也不想在 Java 代码中拼接复杂 SQL 吧
|
29
wqhui 137 天前
@zhenglinsmile jpa 会管理 entity 实体,印象中是个叫生命周期管理之类的东西。如果你应用内存中的 entity 对象带有主键,比如执行 save 或者 select 出来,然后直接改 entity 内容,修改内容会自动同步到数据库,不需要显式调用更新保存
|
30
zhenjiachen 137 天前 via iPhone
@dbpe 赞同,还不如直接 jpa 加 querydsl ,jooq 也可以但是低半版本数据库收费
|
31
jorneyr 137 天前
推荐要么 MyBatis ,要么 JPA ,纯粹一些。
|
32
NikoXu 137 天前 1
springdata Jpa + querydsl
|
33
JoJoWuBeHumble 137 天前
找工作就是无脑 MP ,百分之八十以上的公司都是 MP 。
上家公司用的是 JPA ,问题数据库设计一泡污,导致 JPA 用起来非常不顺手,对新技术又抵触,不愿意引入 querydsl 。 |
34
JoJoWuBeHumble 137 天前
而且你不需要纠结到底是 JPA 还是 MP ,现在 MP 反而不少功能在往 JPA 上面靠。最重要的是 SQL 能写明白就好了
|
35
limyel 137 天前
mybatis plus +1 ,至于 jpa 用到了再学,国内很多厂商的习惯是会自己封装一套 jpa 的查询接口...
|
36
kratosmy 137 天前
目前用的是 JPA ,但是一个方法名太长了。。
|
37
yeyang5211 137 天前
mybatis plus +1 , 简单好用 适用面广
|
38
Richared 137 天前
自己用用 jpa 。如果公司用尽量别用 jpa ,到时候用着用着 selectbyid 就变成扫全部关联表了。
|
39
kenvix 137 天前
直接上 jOOQ 。别给自己添堵
|
40
ychost 137 天前
如果是 Java 那么直接 MBP 就好了,用的人多坑少,如果用 Kotlin 那么建议 Ktorm 用起来比各种 Java 的 ORM 都爽太多,JOOQ 也好、JPA 也好只要是基于 Java 的那么没有语法糖加持都写起来怪怪的
|
41
Goooooos 137 天前
小项目 jdbctemplate ,直接写 sql
|
42
zhenglinsmile 137 天前
@wqhui 确实应该是这个问题 不过我之前排查了代码 除了处理业务那块 其它地方没有定位到对 entity 的修改位置 只能等后面闲了继续查查…
|
43
codingmiao 136 天前
@dasbn 我觉得 Mybatis Plus 作者喷得对,允许传 sql 片段在纯后端用带来很大的灵活性,而且自己可控传什么,总不能自己给自己传个注入语句。使用者自己非要把这个特性暴露给前端还不在执行前做校验( Mybatis Plus 本身也提供了 sql 注入检测的工具类),把刀子递给黑客还怪刀尖没做安全设计这不是纯纯巨婴行为。
|
44
chuck1in 135 天前
@Ayanokouji 之前一直在找一个轻量级的 orm 框架,想不到还真有。。。。。
|
45
chuck1in 135 天前
@zhenjiachen 有开源版本,支持开源数据库,是不收费的。除非你用 oracle 这些。
|
46
zhenglinsmile 135 天前
@wqhui 最终定位到原因了,因为是创建用户,有非常多的初始化资源操作。很多地方使用了 saveAndFlush 这个方法。修改为 save 方法之后,就没有被无效更新了。
|
47
chuliuxiang 119 天前
国内一般都是 mybatis 或者 mybatis-plus ,其实单纯 mybatis+mybatis-generator 就很好用了
|