小菜 jdbc、mybatis 和 hibernate 的疑问。

2017-09-18 17:27:48 +08:00
 kevinhwang

工作用 hibernate,感觉就是开发很快,但运行效率低。

遇到少量性能要求高的地方,用了 jdbcTemplate 提高效率,用起来感觉还是挺爽的啊。

为什么现在主流是 mybatis,而不是 hibernate+jdbc 呢??

4790 次点击
所在节点    程序员
12 条回复
gzb001
2017-09-18 17:54:24 +08:00
mybatis 半自动化 ORM 框架,对于 sql 优化的自由度比较高,并且目前从 ibatis 升级到 mybatis 之后,很多新特性被支持,对于平衡了执行效率和开发效率
fqs
2017-09-18 17:55:43 +08:00
Hibernate 运行效率并不低哦。
ibaits 的流行,个人角色是它完成了一个 ORM 框架应该完成的最本职的工作,相比 Hibernate,也更加轻量,容易掌握和理解;相比 JDBC,功能更加强大,更加易用,算是一个折中的选择吧。
Lpl
2017-09-18 17:56:20 +08:00
你说的是两年前的主流,现在是 JPA
kevinhwang
2017-09-18 18:11:03 +08:00
@fqs 自己测试过简单的 insert 和 delete。jdbc 近似是 hibernate 的三倍效率,跟网上的数据差不多哦。

@Lpl 我就是用 spring data jpa,因为用 spring boot。jpa 只能说是借口规范吧,并不能和以上三者相提并论。
accacc
2017-09-18 18:44:22 +08:00
@kevinhwang 用 jpa 遇到一些问题 比如说联表 比如说分表的查询等等 你中间又遇到过吗
kevinhwang
2017-09-18 19:12:48 +08:00
@accacc 我对 jpa 还是很浅显,只是用了 dao 层命名规范和 hibernate 相关注解,主要还是 hibernate 的使用吧。
yougy
2017-09-18 19:58:41 +08:00
试下 jooq,你会发现如此的简单。。
hantsy
2017-09-18 20:30:51 +08:00
@kevinhwang 这个牛 B 吹大了。

如果非常熟练掌握 SQL 的情况下,复杂查询 JDBC 比 Hibernate 效率只会稍有提高。对于只有半瓢水的 SQL,再加上没什么数据库基础,又懒得去学习 JPA (或 Hibernate ) 的人,用 JDBC 或 MyBatis 写出来程序基本不可能比 Hibernate 还快。
另外,生产环境上,JPA/Hibernate 一般会将两层缓存打开(重复查询根本不访问数据库),用 JDBC 或者 MyBatis 查询性能好的说法基本上是不成立的(高并发的重复查询只会搞死数据库),谈什么与 Hibernate 相比了。而在生产环境中,查询操作数量是远远大于更改( insert, delete, update )操作。

JPA 是规范,Hibernate,OpenJPA, EclipseLInk 提供了 JPA 实现。三者除了标准的 JPA API 外,都有自己的扩展功能,其性能在运行环境中表现有差异。一般来讲,JPA 在应用服务器容器环境( Glassfish,Wildfly )中使用容器管理方式性能会更好一些,Spring 默认是不支持这种方式(当然,如果部署环境是标准应用服务器非 Tomcat 之类 Servlet 容器,也可以在 Spring 使用 Proxy 方式调用容器管理的 EntityManager,相信这里没多少人用过)。

@yougy JOOQ 不错,提供了 Type safe 方式的 SQL 查询,推荐用它代替原始 JDBC 或者 Spring JdbcTemplate 或者 MyBatis。
hantsy
2017-09-18 20:37:01 +08:00
再者选择技术也要与开发效率之间作出平衡。

1. Spring Data JPA,Hibernate 内部都是对 Java 8 的 Stream,Optional 作了特别的实现。
2. JOOQ 也一样针对 Java8 编程方式作了大量优化。

现在 Java 8 是主流了,如果编程还停在用 J2SE 1.3,1.4 年代的方式去写 JDBC,MyBatis,还谈什么工作效率。
kevinhwang
2017-09-18 20:46:30 +08:00
@hantsy 大佬,我知道 jdbc 缓存这个问题,但我测试的是 insert 和 delete (导入 excel 内容需求),缓存在这里是没作用的。select 能高 50%谢天谢地。
我就是很不明白为什么 mybatis 在国内这么火,我是感觉 hibernate 配合 jpa 规范挺方便的,也方便维护。
WispZhan
2017-09-18 23:42:55 +08:00
@hantsy +1.

---
另外感觉 JPA 和 .NET 的 EF(Entity Framework) 有异曲同工之妙。设计思想是一样的。
yzmm
2017-09-19 16:30:53 +08:00
用 JPA 写 repository 是简单,然而一些复杂一点的的 SQL 映射会比较麻烦。至于效率,看是做啥 一个小项目需不着整个 JPA。

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

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

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

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

© 2021 V2EX