为什么感觉国内比较流行的 mybatis 在国外好像没人用的样子?

2018-12-16 21:46:31 +08:00
 gz911122
是什么造成的这个现象啊。
而且感觉国内 java 界在 github 上也不是很活跃?
没找到多少有趣的项目 or 工具。
24884 次点击
所在节点    Java
90 条回复
abcbuzhiming
2018-12-18 16:54:14 +08:00
@beneo 另外,就算不做分析,联表查询仍然是很常见的现象,Hibernate 和 JPA 搞联表真心和吃翔一样。哪怕最简单的联表查询也是
Narcissu5
2018-12-18 17:05:38 +08:00
比方说上来一个请求,PUT /item/1111 要更新价格,直接用 sql

```sql
UPDATE items SET price = 11 WHERE id = 1111
```

如果用 Hibernate,得先吧实体查出来,更新,在放回去。而且每次操作都涉及到所有字段,如果是宽表,生成的 sql 有点感人。即使是简单的查询,mybatis 也可以通过限定字段来避免回表查询。当然这些 hibernate 也可以做到,但真的,比 mybatis 麻烦多了。
beneo
2018-12-18 18:10:18 +08:00
·
@Narcissu5 dynamic update
beneo
2018-12-18 18:12:22 +08:00
@Narcissu5
@abcbuzhiming

复杂 SQL,比方说各种 JOIN 手写 SQL 是不错的
主要还是开发效率,HIbernate 真的比 Mybatis 不知道搞了多少。

没有 500W 用户的业务我觉得 Hibernate 足以
mmdsun
2018-12-20 18:39:55 +08:00
@sagaxu 哇。分析的很对。我可以引用一下吗?楼上知乎没有一个我满意的答案。
Sanko
2019-01-13 22:02:41 +08:00
所以说,我要学哪个
gz911122
2019-01-14 11:18:30 +08:00
@tatelucky 那么你一顿 bb 也没说为啥国外不流行啊
文不对题的经典表现吧
tatelucky
2019-01-14 19:00:36 +08:00
@gz911122 别拿你无知说 bb,懒得和你扯这些,和你讲事实就是 bb,你估计水平也就这样了,已拉黑,浪费时间
ymstars
2019-03-30 21:23:21 +08:00
看了这么多回复。忍不住了!
1. hibernate 历史悠久并不代表过时,mybatis 这种方式就是未来吗?肯定不是。数据库就是用来存数据的,联表查询一大堆只能说明数据结构设计是有问题的,只是不愿承认或者心里没底而已,竟然还有人为了排序筛选数据,把复杂的运算放到关系型数据库去做,咋不上天呀,你这是叫格力的仓管大爷去替你拿材料,顺便让他根据各种因子计算新型压缩机的功率损耗。数据分析就不应该让关系型数据库做,这叫各司其职。
2. @Narcissu5 这条语句的逻辑很有意思:“ UPDATE items SET price = 11 WHERE id = 1111 “,难道你公司更新数据的时候不需要先取出数据再更新吗?对了,但凡有一点点的并发需求,无论是乐观锁还是悲观锁,都需要查询到最新的数据不是吗,悲观的加锁,乐观的核对 Version。至于全字段回写数据库,只是不知道有这种操作而已,hibernate 明明可以指定局部字段更新的好吗
3. 报表逻辑真实存在!这也许是一种让程序员通过关系数据库把数据分析这活也干了的一种借口吧,程序员可不要乐在其中哦
4. 微服务都大行其道了,还在狂钉外键,一大堆联表查询,sql 语句多达几百行,想想都忍不住噗。定义好业务边界,拆分成独立子系统吧,不然到了一定规模,别说 hibernate 干不了这活,mybatis 手写 sql 又咋样,同样干不了,不信你给某个大厂的高流量数据钉个外键试试,看他们技术总监会不会拿刀追着你。小公司规模往往远没有达到那种撑不住的程度,大厂的高访问量业务数据早已不是这里逼逼的联表查询了。。。
5. 如果公司的数据库要从 mysql 转移到 Oracle 或者 sqlserver 或者其他的数据库,用 mybatis 的,就问你慌不慌吧。spring 官方支持 jpa 并不是没有依据的,jpa 屏蔽了底层差异。
既然 Jpa 用起来省心,没必要硬跟某些大厂的步伐,一步两步,似魔鬼的步伐!

就像淘宝技术十年里说的:

如用户模块,老的 member.taobao.com 继续维护,不添加新功能,新功能在新的模块上开发,跟老的模块共用一个数据库,开发完毕之后放到不同的应用集群上,另开一个域名 member1.taobao.com ,同时再替换老的功能,替换一个,就把老的模块上的功能关闭一个,逐渐把用户引导到 member1.taobao.com ,等所有的功能都替换完之后,关闭 member.taobao.com 上。从设计上来看,这个 member1 的二级域名应该是一个过渡状态,但我们把 member 域名的代码下线以后,发现很难把 member1 切换回 member,因为有些地方把链接写死了,于是后来很长时间里我们都是在用 member1.taobao.com 这样奇怪的域名。一年后,有另外一家互联网公司开始做电子商务了,我们发现他们的域名也叫 member1.xx.comauction1.xx.com ,复制得毫无保留,我们只能会心一笑。
Narcissu5
2019-03-30 22:58:23 +08:00
@ymstars 如果操作是幂等的为什么不能直接更新。我当然知道 hibernate 可以局部 select 或者更新,问题是写出来真的能看?遇到 insert..select,update..join 这样的操作 hibernate 能做?

为什么不用连表查询?如果只是单表查询 nosql 做得比关系型好多了。但是关系型活得好好的,为啥?因为 JOIN 确实牛逼啊,因为 JOIN 确实牛逼啊,因为 JOIN 确实牛逼啊。重要的事情说三遍。我也反对过多的 JOIN,但是合理的 JOIN 确实是任何 nosql 都不能企及的银弹啊,join 没错,只是被滥用了而已。再说了微服务和外键有什么关系,外键和 join 又有什么必然联系

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

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

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

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

© 2021 V2EX