在持久层框架中无可厚非的就是mybatis了,但是也会经常被人问到为啥要用mybatis,为啥不用hibernate,jpa。很多人各级都是地铁爷爷看手机的表情,似乎从来没想过这个问题。“公司叫用我就用了呗”

如果期望有好的发展我觉得我们应该学会知其然&知其所以然,这样才会有自己想要的进步,今天就来具体讲讲他们之间的区别以及为什么现在mybatis都在用却摒弃了以前那么牛*的Hibernate。希望可以帮助到思进取的你。

SpringJPA、Hibernate、 Mybatis简述

Hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的ORM框架,Hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Spring Data JPA:Spring Data JPA是Spring Data的子模块,默认由Hibernate实现。Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。
Mybatis:MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。Mybatis:着力于POJO与SQL之间的映射关系。

由上面的简述就可以看到SpringJPA、Hibernate、 Mybatis三者对比其实就是Hibernate与Mybatis之间的对比(Spring Data JPA默认由Hibernate实现)

Hibernate与 Mybatis的比较

使用方式上的比较

Hibernate是一个自动化更强的持久性框架,省去了绝大多数的SQL的编写。Hibernate面向对象与对象之间的模型,因为封装了完整的对象关系映射机制所以内部十分复杂,学习周期也比较长。而Mybatis将sql的入参和查询结果映射成POJOs,面向于ResultMap的映射,需要写的SQL语句跟多。
总结:封装程度越高东西越不灵活,大家应该都有过体验吧。Hibernate使用起来简单,但是很不灵活,很多复杂场景的运用很鸡肋。不如Mybatis的随心DIY舒心。

开发难度的比较

上面有说过,因为Hibernate封装了完整的对象关系,因此学习难度大于Mybatis,使用Mybatis的时候专注于SQL的编写以及映射关系就OK了。

查询的比较

简单查询

Hibernate 提供了基础的查询方法
Mybatis需要手动编写SQL语句

高级查询

Hibernate通过对象映射机制,开发者无需关心SQL的生成与结果映射,专注业务流程;
Mybatis需要通过手动在XML文件中编写SQL语句以及ResultMap或者注解。
也就是说Hibernate用起来简单,但是DIY能力远差于Mybatis。

缓存机制的比较

相同点
Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。

不同点
Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存。

MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。

数据库的移植性比较
Hibernate 对数据库提供了较为完整的封装,封装了基本的DAO层操作,有较好的数据库移植性

Mybatis 可以进行更细致的SQL优化,查询必要的字段,但是需要维护SQL和查询结果集的映射,而且数据库的移植性较差,针对不同的数据库编写不同的SQL

总结
抛开业务场景,只针对使用上来看的话,Hibernate 比Mybatis更加方便。但是写程序永远脱离不了业务,面对日益复杂话的业务场景,Mybatis的灵活性尤为重要。

ORM框架的使用需要根据具体的项目业务选择更适合的技术方案,而不能一味地为了技术而技术。但是在大数据时代为了应对复杂的场景Mybatis首当其冲的成为首选的持久化框架。

亲~全部手写,个别错误字眼请忽略

ORM框架 Mybatis、Hibernate、Spring Data JPA之到底该用谁,谁更牛*的更多相关文章

  1. MyBatis 与 Spring Data JPA 选择谁?

    MyBatis 与 Spring Data JPA 选择谁? https://www.v2ex.com/t/285081 jpa predicate优缺点 https://blog.csdn.net/ ...

  2. Hibernate、Mybatis与Spring Data JPA

    从零开始集成Springboot+MyBatis+JPA https://www.jianshu.com/p/e14c4a6f6871 MyBatis 与Hibernate的区别 http://xhr ...

  3. 【hibernate spring data jpa】执行了save()方法 sql语句也执行了,但是数据并未插入数据库中

    执行了save()方法  sql语句也执行了,但是数据并未插入数据库中 解决方法: 是因为执行了save()方法,也执行了sql语句,但是因为使用的是 @Transactional 注解,不是手动去提 ...

  4. spring data jpa 全面解析(实践 + 源码分析)

    前言 本文将从示例.原理.应用3个方面介绍spring data jpa. 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 JPA是什么? JPA (Java ...

  5. 【spring boot 系列】spring data jpa 全面解析(实践 + 源码分析)

    前言 本文将从示例.原理.应用3个方面介绍spring data jpa. 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 JPA是什么? JPA (Java ...

  6. 【ORM框架】Spring Data JPA(一)-- 入门

    本文参考:spring Data JPA入门   [原创]纯干货,Spring-data-jpa详解,全方位介绍  Spring Data JPA系列教程--入门 一.Spring Data JPA介 ...

  7. 实例对比 hibernate, spring data jpa, mybatis 选型参考

    原文: 最近重构以前写的服务,最大的一个变动是将mybatis切换为spring data jpa,切换的原因很简单,有两点:第一.它是spring的子项目能够和spring boot很好的融合,没有 ...

  8. 【Spring Data 系列学习】了解 Spring Data JPA 、 Jpa 和 Hibernate

    在开始学习 Spring Data JPA 之前,首先讨论下 Spring Data Jpa.JPA 和 Hibernate 之前的关系. JPA JPA 是 Java Persistence API ...

  9. 来说说JPA、Hibernate、Spring Data JPA之间的什么关系?

    目录 JPA Hibernate Spring Data JPA 实践 来说说JPA.Hibernate.Spring Data JPA之间的什么关系 Java 持久层框架访问数据库的方式大致分为两种 ...

随机推荐

  1. 【MySQL】索引的本质(B+Tree)解析

    索引是帮助MySQL高效获取数据的排好序的数据结构. 索引数据结构 二叉树 红黑树 Hash表 B-Tree MySQL所使用为B+Tree (B-Tree变种) 非叶子节点不存储data,只存储索引 ...

  2. Tomcat——启动报错:Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Servlet_app02a]]

    java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com ...

  3. step over、step into、step into my code、step out、run to cursor

    红 step over 跳过子函数 黄 step into 进入子函数 蓝 step into my code 不执行源码的子函数执行自己的 黑 step out 跳出当前函数 绿 run to cu ...

  4. 货车运输 noip2013 luogu P1967 (最大生成树+倍增LCA)

    luogu题目传送门! 首先,题目让我们求每个货车的最大运输量,翻译一下就是求路径上边权最小的边. 利用一下贪心思想可知,所有货车肯定都会尽量往大的边走. 进一步翻译,即为有一些小边货车根本不会走,或 ...

  5. [wordpress使用]004_导入多媒体

    在写文章的时候难免要需要用到图片.音频或者视频文件,wordpress不仅提供本地上传多媒体文件功能,更提供在线导入多媒体.能更方便,范围更大的获取我们所需要的资源. 本地上传文件 在写文章的界面,选 ...

  6. C#线程 使用线程

    第三部分 使用线程 基于事件的异步模式 基于事件的异步模式(EAP)提供了一种简单的方法,通过这些方法,类可以提供多线程功能,而使用者无需显式启动或管理线程.它还提供以下功能: 合作取消模型 工作人员 ...

  7. 【Java8新特性】不了解Optional类,简历上别说你懂Java8!!

    写在前面 最近,很多读者出去面试都在Java8上栽了跟头,事后自己分析,确实对Java8的新特性一知半解.然而,却在简历显眼的技能部分写着:熟练掌握Java8的各种新特性,能够迅速使用Java8开发高 ...

  8. NET-NTLM hash传递

    net-ntlm无法进行hash直接传递,通过responder等中继器拿到的net-ntlm破解也很难,所以利用responder加MultiRelay获取一直存在的shell. 注意的一点是: N ...

  9. 通过jquery实现tab切换

    //css代码 *{ margin: 0; padding: 0; } #box{ margin: 0 auto; width: 800px; border: 5px solid #000000; o ...

  10. GNS3内网通过cloud与实际网络实现互连互通的实验(使用环回网口)

    一.背景: 在GNS3内构建一个测试网络,该测试网络的设备能够通过cloud访问外部网络设备和Internet网,外部网络也能直接访问GNS3内网的设备. 考虑通过cloud上的环回口连接GNS3内网 ...