ORM框架 Mybatis、Hibernate、Spring Data JPA之到底该用谁,谁更牛*
在持久层框架中无可厚非的就是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之到底该用谁,谁更牛*的更多相关文章
- MyBatis 与 Spring Data JPA 选择谁?
MyBatis 与 Spring Data JPA 选择谁? https://www.v2ex.com/t/285081 jpa predicate优缺点 https://blog.csdn.net/ ...
- Hibernate、Mybatis与Spring Data JPA
从零开始集成Springboot+MyBatis+JPA https://www.jianshu.com/p/e14c4a6f6871 MyBatis 与Hibernate的区别 http://xhr ...
- 【hibernate spring data jpa】执行了save()方法 sql语句也执行了,但是数据并未插入数据库中
执行了save()方法 sql语句也执行了,但是数据并未插入数据库中 解决方法: 是因为执行了save()方法,也执行了sql语句,但是因为使用的是 @Transactional 注解,不是手动去提 ...
- spring data jpa 全面解析(实践 + 源码分析)
前言 本文将从示例.原理.应用3个方面介绍spring data jpa. 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 JPA是什么? JPA (Java ...
- 【spring boot 系列】spring data jpa 全面解析(实践 + 源码分析)
前言 本文将从示例.原理.应用3个方面介绍spring data jpa. 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 JPA是什么? JPA (Java ...
- 【ORM框架】Spring Data JPA(一)-- 入门
本文参考:spring Data JPA入门 [原创]纯干货,Spring-data-jpa详解,全方位介绍 Spring Data JPA系列教程--入门 一.Spring Data JPA介 ...
- 实例对比 hibernate, spring data jpa, mybatis 选型参考
原文: 最近重构以前写的服务,最大的一个变动是将mybatis切换为spring data jpa,切换的原因很简单,有两点:第一.它是spring的子项目能够和spring boot很好的融合,没有 ...
- 【Spring Data 系列学习】了解 Spring Data JPA 、 Jpa 和 Hibernate
在开始学习 Spring Data JPA 之前,首先讨论下 Spring Data Jpa.JPA 和 Hibernate 之前的关系. JPA JPA 是 Java Persistence API ...
- 来说说JPA、Hibernate、Spring Data JPA之间的什么关系?
目录 JPA Hibernate Spring Data JPA 实践 来说说JPA.Hibernate.Spring Data JPA之间的什么关系 Java 持久层框架访问数据库的方式大致分为两种 ...
随机推荐
- 02.drf不使用serializers返回数据
drf 可以使用不经过model和serialzier的数据返回,也可以配置权限 class DashboardStatusViewset(viewsets.ViewSet): "" ...
- python3.x 基础三:字符集问题
总结了一张表,更详细信息百度百科: 序号 年份 编码 标准协会 特点 二进制长度 字符长度 表现 1 1967 ASCII 美国国家标准学会(American National Standard In ...
- Java Web之路一:过滤器(Filter)
一.过滤器(Filter)简介 过滤器是对web资源进行拦截,做一些处理后再交给下一个过滤器或Servlet处理,主要可以拦截request和response 过滤器是以一种组件的形式与web程序绑定 ...
- JavaScript高级技术总结
正则表达式 正则表达式的作用 正则表达式的作用: 匹配字符串的一种规则,正则表达式的作用主要是用于匹配字符串的 需求: 校验手机号 <!DOCTYPE html> <html la ...
- python基本数据类型;字符串及其方法三:
###################判断类型################### ######################################################### ...
- 第几天?(hdu2005)
第几天那个代码模板可以保存起来. #include<stdio.h> #include<math.h> #define PI 3.1415927 using namespace ...
- js 获取百度搜索关键词的代码
有可能有时候我们会用到在百度搜什么关键词进来我们的网站的,所有我们又想拿到用户搜索的关键词. 这是我研究了半天所得出的办法.话不多说直接贴代码 <script> function quer ...
- Java 对象的继承,抽象类,接口
子父级继承 关键字 extends 首先创建一个父类 class Fu { String name; int a=1; public void word() { System.out.println( ...
- java方式实现希尔排序
一.希尔排序简述和基本思想 希尔排序也称递减增量排序算法,是插入排序的一种更高效的改进版本.但是希尔排序是非稳定排序的算法.希尔排序比一般插入排序有以下几点改进: 一般插入排序每次只能将数据移动一位, ...
- Rocket - devices - bootrom
https://mp.weixin.qq.com/s/PylfNmJDRasTUj9fGp7gLQ 简单介绍bootrom目录中各个文件的实现. 1. Makefile 1) make过程 Makef ...