工作用 hibernate,感觉就是开发很快,但运行效率低。
遇到少量性能要求高的地方,用了 jdbcTemplate 提高效率,用起来感觉还是挺爽的啊。
为什么现在主流是 mybatis,而不是 hibernate+jdbc 呢??
1
gzb001 2017-09-18 17:54:24 +08:00
mybatis 半自动化 ORM 框架,对于 sql 优化的自由度比较高,并且目前从 ibatis 升级到 mybatis 之后,很多新特性被支持,对于平衡了执行效率和开发效率
|
2
fqs 2017-09-18 17:55:43 +08:00
Hibernate 运行效率并不低哦。
ibaits 的流行,个人角色是它完成了一个 ORM 框架应该完成的最本职的工作,相比 Hibernate,也更加轻量,容易掌握和理解;相比 JDBC,功能更加强大,更加易用,算是一个折中的选择吧。 |
3
Lpl 2017-09-18 17:56:20 +08:00 via iPhone
你说的是两年前的主流,现在是 JPA
|
4
kevinhwang OP |
5
accacc 2017-09-18 18:44:22 +08:00
@kevinhwang 用 jpa 遇到一些问题 比如说联表 比如说分表的查询等等 你中间又遇到过吗
|
6
kevinhwang OP @accacc 我对 jpa 还是很浅显,只是用了 dao 层命名规范和 hibernate 相关注解,主要还是 hibernate 的使用吧。
|
7
yougy 2017-09-18 19:58:41 +08:00 via Android
试下 jooq,你会发现如此的简单。。
|
8
hantsy 2017-09-18 20:30:51 +08:00 1
@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。 |
9
hantsy 2017-09-18 20:37:01 +08:00 2
再者选择技术也要与开发效率之间作出平衡。
1. Spring Data JPA,Hibernate 内部都是对 Java 8 的 Stream,Optional 作了特别的实现。 2. JOOQ 也一样针对 Java8 编程方式作了大量优化。 现在 Java 8 是主流了,如果编程还停在用 J2SE 1.3,1.4 年代的方式去写 JDBC,MyBatis,还谈什么工作效率。 |
10
kevinhwang OP @hantsy 大佬,我知道 jdbc 缓存这个问题,但我测试的是 insert 和 delete (导入 excel 内容需求),缓存在这里是没作用的。select 能高 50%谢天谢地。
我就是很不明白为什么 mybatis 在国内这么火,我是感觉 hibernate 配合 jpa 规范挺方便的,也方便维护。 |
11
WispZhan 2017-09-18 23:42:55 +08:00
|
12
yzmm 2017-09-19 16:30:53 +08:00
用 JPA 写 repository 是简单,然而一些复杂一点的的 SQL 映射会比较麻烦。至于效率,看是做啥 一个小项目需不着整个 JPA。
|