hibernate 好用还是mybatis好用

讨论了Java开发中MyBatis与Hibernate的选择,分析了两者在企业应用中的优劣,探讨了开发效率、性能及长期维护的问题。

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

Mogugugugu 

    2

Mogugugugu   2018-12-16 21:53:04 +08:00 via Android

Java 混了这么多年不就是保守么。。。虽然也有创新,但是企业开发,用了什么新框架,小众框架,要重新踩坑不说,开发人员离职了谁来扛旗谁来接锅,这也就是为啥企业喜欢成熟的大众化的,开发效率 性能固然重要,但是还是要看长远的。

Sharuru 

    7

Sharuru   2018-12-16 22:11:22 +08:00   ❤️ 3

国内技术圈流行的东西和国外是有一定代差的。

就拿 Spring Boot 来说,注解配置都出来多久了,国内现在起手还是一个 xml 教你配置。
一方面语言是一种因素,另一方面我觉得百度上能搜到的教程都是屎;导致整体水准上不去。

其实 Hibernate 现在配合 Spring Data 足够易用了,简单需求可以只靠方法名就生成一堆搜索。

(然而之前还有帖子在说 ORM 是毒瘤,raw sql 才是王道。)

楼主既然眼界宽了一点,也就没必要自扰,喜欢一个用就完事儿了。

 

echo1937 

    8

echo1937   2018-12-16 22:15:13 +08:00 via iPhone   ❤️ 12

和 pivital 工程师聊过这个问题,对方的回答是,国内很喜欢手写 sql,尤其是复杂的 sql,在这点上老外这个需求就少很多。

进一步询问,这些 sql 都是干啥的,p 厂的调研结果是,给领导提供数据啊报表之类的需求多,业务需求相关其实少。

CallMeReznov 

    15

CallMeReznov   2018-12-16 22:33:06 +08:00

@echo1937 有没有专门整合这种临时需求的报表工具或者方式
领导,或者运营,产品总是对后端数据展示这块设计需求不重视,产品都上线了还是让运维到线上数据库查,查完就拉倒也不跟开发说要加个类似的参数展示.过几天又想看那就又查.
就不能搞个什么东西给他们 让他们自己查,最好还有一定的自定义的空间

alcarl 

    12

alcarl   2018-12-16 22:27:14 +08:00 via Android

国外的 java 历史比咱要早个十几年,遗留的东西和人也多,自然对新东西接受的就少一些。中国是从 2005 年左右起,互联网浪潮才开始有大规模的 java 开发,甚至到 2010 年以后才有大批量的新人入行,it 这行是什么新用什么是自然的。其实很久以前国内招 java 的基本全是要熟练 ssh 的,不过最近这些年 struts 基本没人用了,还经常出些大漏洞。hibernate 和 mybatis 相比要写很多框架需要的冗余代码,写小项目的效率不行,不适合雨后春笋般的互联网企业,spring boot 也是为了简化提高搭建效率而生的,很快就流行起来了。
从主观上说到底其实就一个原因码农天生的懒,懒癌晚期患者。。。。。。。

200123_normal.png?m=1481374171 

    17

sagaxu   2018-12-16 22:50:05 +08:00 via Android   ❤️ 7

db 访问分为这么几种
1. 写 sql,各个 db 差异要自己适配
2. 写 dsl,屏蔽了 db 差异,自动适配
3. 运行时或编译时自动合成 sql,屏蔽 db 差异

mybatis 和 jdbc 是第一种,hql 是第二种,jpa 是第三种,开发效率依次递增,表达能力依次递减。在我看来,mybatis 已经是过去式了,jpa 可以满足 80%以上的需求了,少数交给 hql,极少数直接走 jdbc(temple)。

 

HiJackXD 

    50

HiJackXD   2018-12-17 13:25:07 +08:00 via iPhone

主要原因还是 hibernate 深入太难,不看看文档一不小心就会掉入性能深坑,比如多字段的数据更新,hibernate 的 update 默认是更新所有字段(无论其他字段有没有变)但其实可以配置好只更新有变化的字段。 但是文档主要是英文,国人大部分看起来肯定没外国人流畅。但 mybatis 都是自控 sql,没多少需要注意的坑。大家就这样觉得 hibernate 性能不行, 其实是自己不会用。。

178820_normal.png?m=1466689766 

    52

kevinhwang   2018-12-17 13:39:11 +08:00   ❤️ 2

其实国内真的大部分是 mybatis,这是工程师素质导致的。
国内工程师英文比较差,较少读 api doc,遇到和 hibernate 和 jpa 的坑就会很无助。
而 mybatis 实现简单,直接查看源代码一步一步 debug 也能找出问题( hibernate 试试看)。
国外的趋势是对的,jpa 提高开发效率非常高。mybatis 和 jpa ( hibernate )都用过。
mybatis 开发慢,且注解方式非常不优雅,属于落后框架,但维护起来真的舒服。
hibernate 真的门槛比较高,若在并表的情况下(互联网很少),开发一时爽,维护火葬场。
个人看法是 hibernate+jdbc。mybatis 真的很落后,都什么年代了还 xml,注解又做不好。

ymstars 

    89

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.com 、auction1.xx.com ,复制得毫无保留,我们只能会心一笑。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值