未来可能会取代 mybatis 成为 java orm 第一选择 当然不适用 springboot 的话就不好说了
未来可能会取代 mybatis 成为 java orm 第一选择 当然不适用 springboot 的话就不好说了
1
taogen Dec 14, 2020 via Android 我选 mybatis plus
|
2
fxjson Dec 14, 2020
一直看好 jpa, 但是,但是,国内好像用 mybatis 的多
|
4
manami Dec 14, 2020
用过都说好
|
5
sue0917 Dec 14, 2020 via Android 国内 mybatis,vue 国外 jpa reactjs
|
6
chendy Dec 14, 2020
遇到不靠谱的产品乱改,模型稳定不下来,jpa 就远没有 mybatis 好用了
另外,mybatis 不是 orm 。。。 |
7
liyhu Dec 14, 2020
mybatis 永不为奴
|
8
beginor Dec 14, 2020 via Android
jpa 可以做到完全的强类型, 这一点 mybatis 做不到
|
11
optional Dec 15, 2020 via Android java 的语言特性,支持不了多好的强类型 orm,最后还是得靠 sql 修修补补。
吐个槽 jpa 连个 upsert 都不敢支持 |
13
Sharuru Dec 15, 2020 via Android 归根结底还是要看项目设计。
有点像前几天社区里讨论的国内流行 CentsOS,国外流行 Ubuntu 那样的感觉。 系统符合 DDD 的,JPA 一把梭就出来了,甚至只靠方法声明就能查数据,但这种对 Modeling 的要求很高。 MyBatis 国内吃香主要还是因为业务复杂程度所致,各种神秘连表。 一般来说,正常项目都会同时引入 JPA 和 MyBatis,简单查询以及插入用 JPA,复杂,要调优的用 MyBatis 。 此外,其实 JPA 也是可以发行 Native SQL 进行查询的,只不过写起来没 MyBatis 那么直观就是了(映射,条件判断之类)。 |
14
nutting Dec 15, 2020
对,关键是这个 DDD,国内或者说业界不流行这个,都是围绕数据库设计
|
16
EminemW Dec 15, 2020 via iPhone
查询实体某些字段的时候,要用 Map 接收,或者弄一个接口只写 get 方法,这种方式觉得很怪
|
17
sagaxu Dec 15, 2020 via Android
jdbctemplate 永不为奴
|
18
graffitist Dec 15, 2020
我们用的是 jpa 做增删改,通过解析 xml 用 jpa 的 Native SQL 来连表查
|
21
mmdsun Dec 15, 2020
2020 年,jpa 对 2 表联合查询,只取部分字段的支持怎么样 ?记得以前 jpa 用连表还得配置一对多,多对一,不然 join 直接报错。 感觉 jpa 配置不好,性能很难优化,经常出现 n+1 查询情况。
现在 jpa 使用还是要配置一对多,多对一么? |
22
ghostsf Dec 15, 2020
综合一下 mybatis plus +1
|
24
Yano Dec 15, 2020
jpa 对单表简单的增删改查还是很爽的~我现在小的项目是 jpa,涉及复杂的再用 jdbcTemplate,其实我感觉 jdbcTemplate 也很简单呀~也很灵活。
|
25
kaiz1121 Dec 15, 2020
不管 mb 还是 jpa 都是 crud 手动狗头
|
28
echo1937 Dec 15, 2020
@myqa #20 我所在项目确实是 JPA + 原生 MyBatis,
为什么 Spring JPA 运用越来越广泛了? 1 、微服务兴起,DDD 略有抬头; 2 、不时兴多表查询了,现在是个程序员都会被教育“超过三张表禁止 join”; 3 、原生 MyBatis 要么手写效率低,要么靠插件生成一堆模板代码,实在不是我这种 Lombok 党的菜。MyBatis-PLUS 很好地弥补了这个问题,并提供了很多功能增强,但是他定义了很多特有的注解,实现了类似 JPA 的功能,这点我不太喜欢。 |
29
myqa OP @echo1937 想当年一开始是 Hibernate 比较流行,后来嫌弃他性能慢(主要是乱用),都用 mybatis,现在 Hibernate 伪装成 spring data jpa 又回来了,真是因吹斯听
|
30
q149072205 Dec 15, 2020
jpa 谁用谁知道。用了根本停不下来。。
|
31
mmdsun Dec 15, 2020
|
32
lewis89 Dec 15, 2020
@mmdsun #31 这..需要控制这么细致吗 QueryDSL 是可以生成 condition 对象的,无非是要手写代码判断是不是要把这个 condition 加进去...
|
33
Saurichthys Dec 15, 2020
用 nutz dao 丝滑
|
34
myqa OP @Saurichthys 前提得用 nutz,不过感觉始终是小众框架,类似于 php 上的 tp
|
35
a719031256 Dec 15, 2020
看好 mybatis plus,过度方便,jpa 以前用过,现在忘完了。。。。
|
36
Saurichthys Dec 15, 2020
@myqa 不用的呀,现在直接 springboot 加一个 nutz-starter 的依赖就行了
|
37
myqa OP @Saurichthys 哦哦我五年前用过还没这东西,不过感觉还是 jpa 好毕竟学习资料多
|
38
zhouyou457 Dec 15, 2020
虽然前期看起来不用写 sql 很美好,但是等业务量(瞎改)一上来的时候需要写各种关联 sql 的时候就恶心了。
别问我为啥,现在看着手头的产品的源码就头疼。代码版本才到 1.5 就已经难以维护了,service 层各种拼接 SQL 字符串。 |
39
wangyanrui Dec 15, 2020 via Android
DDD 的 CQRS 了解一下
|
40
hantsy Dec 15, 2020 十年前就取代了。
用 JPA 的最好去正经的看一本 JPA 的书,比 Pro JPA2,Java Persistence with Hibernate (这个是 Hibernate 作者写的) 等。JPA 是一套完整的 Java Persistence 方案体系,不是简单的取代 SQL 。如果在你在报怨 Hibernate 性能, 在埋怨 Hibernate 执行效果你不如你写的 SQL,如果你不是 SQL 方面专家,对于 95%以上的人都是伪命题,你根本就没正经的用过 Hibernate 。 再说句费话,只有中国人在用 Mybatis 。 |
41
hantsy Dec 15, 2020
@myqa Spring Data JPA 与 Hibernate 没太大关系。只是默认情况下,Spring Boot 在 DataJPA stater 中添加 Hibernate (作为 JPA 规范的 provider )省事。
在国内,我帮朋友公司面过工作 5 年以上的 Java 开发人员,不清楚 JPA 与 Hibernate 关系的大把。 用过 ElipseLinks, OpenJPA 更少,当然一半是听都没听说过。 |
42
wangyanrui Dec 15, 2020
国内还是面向数据库编程的比较多
另说一个很现实的情况: 中小型公司,其实更会在乎 SQL 到底怎么写,要不要 SELECT 某几个字段,或者怎么 JOIN 等等 大体量的公司,单说 DB 层面,起码见过的几家国内大厂,都是 SELECT * ,然后自己在代码里实现简单的 JOIN 复杂 JOIN 不是 CURD boy 负责的事情,有专门的数据部门抽取到 Hive 之类的去单独处理 加机器远比优化代码要来的迅速,不行就上 TiDB 之类的东西,而且 SELECT 某几个字段和 SELECT * 并没有想象中那么大的性能差距(当然不回表的除外) |
47
jjianwen68 Dec 15, 2020
那么,你们开始使用 spring r2dbc 了吗
|
48
jeizas Dec 15, 2020
@jjianwen68 mysql 还是没官方支持
|
49
hantsy Dec 15, 2020
@jjianwen68 还不能完全代替 Jdbc 。
|
50
hantsy Dec 15, 2020
@jjianwen68 R2dbc 从开始浮化就自己玩了,最近 Spring Boot 2.4/Spring Data R2dbc 1.2 这个版本,API 变化太大了,API 结构上完全重构了,一部分功能移到 Spring 核心了。
https://github.com/hantsy/spring-r2dbc-sample |
51
hantsy Dec 15, 2020
@jeizas 和 Jdbc 一样,R2dbc 也是一套标准规范了(现在在 reactive 基金会下监管,https://www.reactive.foundation/projects),同样需要驱动实现。实现 MySQL 的 R2dbc 驱动已经不止一套了。
|
52
hantsy Dec 15, 2020
https://r2dbc.io/drivers/ 官网可以看到两套 MySQL 驱动了。
|
53
tesguest123 Dec 15, 2020 via iPhone
后台管理系统不要太香,又增加摸鱼时间。
|
55
skypyb Dec 15, 2020
我也喜欢 JPA, 但还是不得不选择 MyBatis, 因为 JPA 写那种带数据库特有函数的 SQL 挺麻烦的。。
比如我用的 Postgres, 我要用那种 ts_rank 、to_tsquery 这种函数, 还带着大段的 WHERE 条件的话, 还是在 XML 里写漂亮清晰。 要是 JPA 能支持文件写 SQL, 鬼才用 MyBatis |
56
myqa OP @jjianwen68 这个看起来可挺香的,之前写脚本语言的时候发现很多 orm 都是这么做的,貌似 java 也有类似的框架
|
57
fxjson Dec 15, 2020
单表查询 jpa,多表查询 querydsl, 谁用谁知道
|
61
hantsy Dec 16, 2020
JPA 从一开始就支持完全使用 XML 配置(orm.xml, persistence.xml 两个标准文件,目前一般应用服务器中 persistence.xml 是必须的,orm.xml 则是可选的,在 Spring 中使用更高级的 LocalContainerEntityManagerFactory 时,persistence.xml 也是可选的),只是很少人用,毕竟 Annotation 配置是大势所趋,下一代的 JPA 标准可能 persistence.xml 也和 Servelt,CDI 配置文件一样变成可选的。
所有的 Entity Annotaitons 查询语句都可以转化成 XML 在 orm.xml 中写。 这种纯 XML 配置方式有一种情况适合,比如 你设计的产品 Models 是中立的, 需要适配多种数据源(不一定是数据库,也可能是 RDBMS,或者 NoSQL ),Model POJOs 单独打包成一个 Module (可以是 JPMS 或者就是一个普通的 Jar ),当要使用 JPA 时,用外部化的 XML 配置来实现。 |
62
u2r1Hqo6HExmNsrt Dec 16, 2020
想问一下,用了 nosql 如 mongodb 跟 dynamodb 是不是就不用纠结 jpa 跟 mybatis ?
|
63
mmdsun Dec 16, 2020 via Android
@skypyb 关键词是:XML Named Query Definition
然后写 xml 就可以了。xml 有对应的标签支持原生 SQL 。 <named-query name="User.findByName"> <query>sql </query> </named-query> |
64
SkyLine7 Dec 23, 2020
mybatis plugins 永远滴神
|
65
soulzz Aug 26, 2021
jpa repo extends 一个 JpaSpecificationExecutor
用 CriteriaBuilder 去构建一个查询不香到哪里去了? |