V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kevinhwang
V2EX  ›  程序员

小菜 jdbc、mybatis 和 hibernate 的疑问。

  •  
  •   kevinhwang · 2017-09-18 17:27:48 +08:00 · 5003 次点击
    这是一个创建于 2648 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    @Lpl 我就是用 spring data jpa,因为用 spring boot。jpa 只能说是借口规范吧,并不能和以上三者相提并论。
    accacc
        5
    accacc  
       2017-09-18 18:44:22 +08:00
    @kevinhwang 用 jpa 遇到一些问题 比如说联表 比如说分表的查询等等 你中间又遇到过吗
    kevinhwang
        6
    kevinhwang  
    OP
       2017-09-18 19:12:48 +08:00
    @accacc 我对 jpa 还是很浅显,只是用了 dao 层命名规范和 hibernate 相关注解,主要还是 hibernate 的使用吧。
    yougy
        7
    yougy  
       2017-09-18 19:58:41 +08:00 via Android
    试下 jooq,你会发现如此的简单。。
    hantsy
        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。
    hantsy
        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,还谈什么工作效率。
    kevinhwang
        10
    kevinhwang  
    OP
       2017-09-18 20:46:30 +08:00
    @hantsy 大佬,我知道 jdbc 缓存这个问题,但我测试的是 insert 和 delete (导入 excel 内容需求),缓存在这里是没作用的。select 能高 50%谢天谢地。
    我就是很不明白为什么 mybatis 在国内这么火,我是感觉 hibernate 配合 jpa 规范挺方便的,也方便维护。
    WispZhan
        11
    WispZhan  
       2017-09-18 23:42:55 +08:00
    @hantsy +1.

    ---
    另外感觉 JPA 和 .NET 的 EF(Entity Framework) 有异曲同工之妙。设计思想是一样的。
    yzmm
        12
    yzmm  
       2017-09-19 16:30:53 +08:00
    用 JPA 写 repository 是简单,然而一些复杂一点的的 SQL 映射会比较麻烦。至于效率,看是做啥 一个小项目需不着整个 JPA。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5382 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:17 · PVG 15:17 · LAX 23:17 · JFK 02:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.