JPA、Hibernate、Mybatis的区别
2019独角兽企业重金招聘Python工程师标准>>>
1.概念:
Hibernate :Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。着力点对象与对象之间关系
2.简介:
Mybatis:MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。Mybatis:着力于POJO与SQL之间的映射关系
Spring Data:Spring Data:是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。
3.开发的难度:
Hibernate的开发难度要大于Mybatis、Spring Data。主要是由于Hibernate封装了完整的对象关系映射机制,以至于内部的实现比较复杂、庞大,学习周期较长。
Mybatis 主要依赖于SQL的编写与ResultMap的映射。
Spring Data易上手,通过命名规范、注解查询简化查询操作。
4.查询区别:
简单查询:Hibernate 提供了基础的查询方法,也可以根据具体的业务编写相应的SQL;
Mybatis需要手动编写SQL语句,Spring Data 继承基础接口,可使用内置的增删改查方法。
高级查询:Hibernate通过对象映射机制,开发者无需关心SQL的生成与结果映射,专注业务流程;Mybatis需要通过手动在XML文件中编写SQL语句以及ResultMap或者注解,Spring Data 提供了命名规范查询和注解查询更简便的编写想要的SQL。
5.数据库的扩展性:
Hibernate与数据库具体的关联都在XML中,所以HQL对具体是用什么数据库并不是很关心。
Mybatis由于所有SQL都是依赖数据库书写的,所以扩展性,迁移性比较差。
Spring Data 与数据具体的关联可以通过命名规范查询、注解查询,无需关心数据库的差异,但是通过本地化SQL查询的话,就不易扩展。
6.缓存机制:
相同点:Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。
不同点:Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存。
MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。
Spring Data 可以通过自己的缓存或者第三方缓存方案,配置满足自己业务需要的缓存行为。
6.查询方式:
Hibernate查询:
.1.HQL --->from Admin as admin where admin.name =:name 使用命名参数,仅使用与Hiberante框架
2.Criteria---->对象化查询 Criteria c = getSession().Criteria(Admin.class)
c.add(Restrictions.eq("aname",name));//eq是等于,gt是大于,lt是小于,or是或
c.add(Restrictions.eq("apassword", password));
3.DetachedCriteria----->动态分离查询
4.例子查询-Example.create(user).list()
5.sql查询
Query q = s.createSQLQuery("select * from user").addEntity(User.class);
6.命名查询:Query q = getSession().getNamedQuery(“getUserByID”);
Mybatis查询:
l 定义xml例如;userMapper.xml
l 定义接口userMapper 定义相关的方法 不必编写接口的实现类
l 通过mybatis内部处理机制解析xml文件中的sql
l 调用存储过程 {call 存储过程名}
Spring Data查询:
1.命名查询,需要遵循Spring Data规范,例如findByUser、deleteById 等从右向左解析生成sql
2.注解查询:@Query(“ql语句”)
7.总结:
Hibernate 对数据库提供了较为完整的封装,封装了基本的DAO层操作,有较好的数据库移植性
Mybatis 可以进行更细致的SQL优化,查询必要的字段,但是需要维护SQL和查询结果集的映射,而且数据库的移植性较差,针对不同的数据库编写不同的SQL,
Spring Data JPA 极大的简化了数据库访问,可以通过命名规范、注解的方式较快的编写SQL。
ORM框架的使用需要根据具体的项目业务选择更适合的技术方案,而不能一味地为了技术而技术。
转载于:https://my.oschina.net/jack088/blog/2990268
JPA、Hibernate、Mybatis的区别相关推荐
- 浅谈jpa和mybatis的区别
作者:唯有努力不欺人丶 https://www.jianshu.com/p/32ce87c163d6 链接:https://www.jianshu.com/p/32ce87c163d6 著作权归作者所 ...
- jpa、mybatis、hibernate、spring data jpa区别
在软件开发中,jdbc作为操作数据库的最基本api,它提供了操作数据库的方法.常见的数据库都实现了jdbc,具体的实现都是由数据库厂家来实现.但是jdbc不是一个orm框架(对象关系映射,简单理解为将 ...
- Spring Data JPA 与 MyBatis 对比,你喜欢用哪个?
来源:jianshu.com/p/3927c2b6acc0 概述 Spring Data JPA是Spring Data的子模块.使用Spring Data,使得基于"repositorie ...
- Java设计流程执行器_Java进阶面试精选系列:SpringMVC+SpringBoot+Hibernate+Mybatis+设计模式...
小编精心收集:为金三银四准备,以下面试题先过一遍,为即将到了的面试做好准备,也过一遍基础知识点. 一.Spring/Spring MVC 1.为什么要使用 spring? 2.解释一下什么是 aop? ...
- Jpa第一话 -- Springboot集成Jpa和Mybatis以及Jpa的最全使用
本文主要记录spring-boot-starter-data-jpa的详细使用. 在做一些小型无并发的项目时,说实话第一个想到的就是Jpa,一个Entity走天下. 1.Spring Jpa的使用 基 ...
- 技术专题讨论:JPA vs MyBatis ?您如何选择?(有奖活动)
Spring For All 技术专题讨论第二期 " 开发中大家如何对 JPA 或者 MyBatis 进行技术选型 " 在我们平时的项目中,大家都知道实现数据访问的方式有很多,比 ...
- spring data jpa和mybatis的不同
使用spring data JPA和mybatis都是用来访问数据库,但他们的分工不同: 1.spring data jpa默认使用hibernate作为ORM实现,是spring 提供的一套jpa接 ...
- spring.jpa.hibernate.naming.physical-strategy
# Hibernate 5 物理命名策略类的全限定名 spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.na ...
- Ibatis与Mybatis的区别—侧重于Ibatis
目录 一.什么是Ibatis? 1.iBatis是一款轻量级的持久化框架 2.iBatis最大的特点是将SQL语句与Java代码分离 3.iBatis具有以下几个关键组成部分: 二.Ibatis与My ...
- 木木的Java知识整理——JDBC与MyBatis的区别
看了几篇大佬的相关整理,可以总结成如下几部分. JDBC与MyBatis的区别 一.各自定义 1.1 JDBC 1.2 MyBatis 二.JDBC与MyBatis的区别 一.各自定义 1.1 JDB ...
最新文章
- 如何高效读论文?剑桥CS教授亲授“三遍论”:论文最多读三遍,有的放矢,步步深入...
- .net中对HTTP请求的两种请求:Get和Post的操作
- 前沿·探索·想象力,今年的云栖大会有啥不一样?
- jsp循环输出表格_「翻译」JS可视化学习之七:Promise、事件循环和异步2
- [css] 写一个动画,向上匀速移动100px,向下以1.5倍速度移动200px,一直反复循环
- Android入门笔记02
- 如何将kux格式的视频转换成我们常用的MP4格式
- PHP多功能自动发卡平台源码带手机版 带多套商户模板
- 虚拟光驱传文件到服务器,虚拟光驱服务器
- 2021计算机一级等级考试考前冲刺模拟试题及答案(WPS Office)
- Focal loss分析
- c++逆天改命进阶--AVLTree
- Reason Studios Reason 12 v12.2.5 WiN 音乐制作软件和机架插件
- python输出图形效果的代码_使用Python实现图像标记点的坐标输出功能
- linux shell if参数---markx
- 从CSDN到个人博客空间
- 帝国php调用文章列表,帝国CMS模板中:使用php调用最新文章的代码(非灵动和万能标签)...
- Windows Overview
- 怎么用python实现快递信息自动查询和跟踪?
- 晶体谐振器的关键参数详解