在持久层框架中无可厚非的就是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. zabbix监控redis多实例cpu mem-自动发现

    1.自动发现实例端口脚本,用于zbx item prototypes #!/bin/bash REDIS_PORT=`ps aux |grep redis-server | grep -v 'grep ...

  2. mysql运维入门4:索引、慢查询、优化

    MySQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都是以B-树的形式保存 如果没有索引,执行查询时,MySQL必须从第一个记录开始整表扫描,知道查询到符合要求的记录,记录越大,花费时 ...

  3. 利用js实现 禁用浏览器后退| 去除上一个历史记录链接

    也是查找了好多资料才找到的,这种方式,可以消除 后退的所有动作.包括 键盘.鼠标手势等产生的后退动作. <script language="javascript"> / ...

  4. jdk1.8的一些特性

    一.jdk1.8的特性: Lambda表达式 函数式接口 方法引用 接口的默认方法和静态方法 Optional Streams 并行数组 新时间日期API 二.Lambda表达式: Lambda 表达 ...

  5. ORM多表增删改查

    一 创建多表 在models.py里创建4张表:Author(作者).AuthorDetail(作者详细信息).Publish(出版社).Book(书) 四张表关系为: (1)首先创建一对一关系.On ...

  6. docker启动各种容器命令大全

    安装步骤梳理 搜索镜像 拉取镜像 查看镜像 启动镜像 停止容器 移除容器 安装tomcat docker hub好查找tomcat镜像  docker search tomcat 从docker hu ...

  7. vue配置环境参考

    转  https://www.cnblogs.com/tu-0718/p/7521099.html 转 https://www.jianshu.com/p/1626b8643676 $ vue ini ...

  8. 01.Django-基础

    基础 1. 简介 Django是一个由Python写成的开放源代码的重量级Web应用框架. Django的目的是使常见的Web开发任务,快速和容易 2. 特点 MVC开发模式 内置进行快速web开发所 ...

  9. 前端基础进阶(十三):透彻掌握Promise的使用,读这篇就够了

    Promise的重要性我认为我没有必要多讲,概括起来说就是必须得掌握,而且还要掌握透彻.这篇文章的开头,主要跟大家分析一下,为什么会有Promise出现. 在实际的使用当中,有非常多的应用场景我们不能 ...

  10. JVM调优总结(六)-新一代的垃圾回收算法

    垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限.但是他无法解决的一个问题,就是Full GC所带来的应用暂停.在一些对实时性要 ...