一、JPA 概述

1. Java Persistence API(Java 持久层 API):用于对象持久化的 API

2. 作用:使得应用程序以统一的方式访问持久层

3. 前言中提到了 Hibernate,那么JPA 与 Hibernate究竟是什么关系呢:

1)JPA 是 Hibernate 的一个抽象,就像 JDBC 和 JDBC 驱动的关系

2)JPA 是一种 ORM 规范,是 Hibernate 功能的一个子集 (既然 JPA 是规范,Hibernate 对 JPA 进行了扩展,那么说 JPA 是 Hibernate 的一个子集不为过)

3)Hibernate 是 JPA 的一个实现

4. JPA 包括三个方面的技术:

1)ORM 映射元数据,支持 XML 和 JDK 注解两种元数据的形式

2)JPA 的 API

3)查询语言:JPQL

一、应用场合:

传统公司、部分个人开发者喜欢用jpa;而互联网公司更青睐于mybatis

原因:

1、mybatis更加灵活,开发迭代模式决定了他是互联网公司的首先;每一次的修改不会带来性能上的下降。

2、传统公司需求迭代速度慢、项目改动小,hibernate可以做到一劳永逸;hibernate容易因为添加关联关系或者开发者不了解优化导致项目,造成越改越糟糕。

二、各自特点:

1、mybatis官方文档就说了他是一个半自动化的持久层框架,相对于按自动的hibernate更加灵活可控;

2、mybatis的学习成本低于hibernate。

3、使用hibernate需要对他有深入的了解,尤其是缓存方面,作为一个持久层框架,性能还是第一位的。

hibernate具有三级缓存,一级缓存默认是开启的,二级缓存需要手动开始并配置优化,三级缓存可以整合业界流行的缓存技术:redis,ecache等等。

4、hibernate在关联查询中的懒加载。(在开发中,还是不建议去过多使用外键去关联操作)

5、jpa是一种规范,hibernate也是遵从这种规范;

6、springDataJpa是对repository的封装,简化了repository的操作。

使用了一段时间jpa,而mybatis是之前一直在用的,不说区别是啥,因为有很多人比较这两个框架了! 
从国内开源的应用框架来看,国内使用jpa做orm的人还是比较少,如果换成hibernate还会多一些,所以面临的风险可能就是你会用,和你合作的人不一定会用,如果要多方协作,肯定要考虑这个问题! 
灵活性方面,jpa更灵活,包括基本的增删改查、数据关系以及数据库的切换上都比mybatis灵活,但是jpa门槛较高,另外就是更新数据需要先将数据查出来才能进行更新,数据量大的时候,jpa效率会低一些,这时候需要做一些额外的工作去处理!

1.相对来说,jpa的学习成本比mybatis略高 
2.公司业务需求频繁变更导致表结构复杂,此处使用mybatis比jpa更灵活 
3.就方言来讲,一般公司选定数据库后再变更微乎其微,所以此处方言的优势可以忽略

很多人青睐 Mybatis ,原因是其提供了便利的 SQL 操作,自由度高,封装性好……SpringData JPA对复杂 SQL 的支持不好,没有实体关联的两个表要做 join ,的确要花不少功夫。

谈起操作数据库,大致可以分为几个阶段:首先是 JDBC 阶段,初学 JDBC 可能会使用原生的 JDBC 的 API,再然后可能会使用数据库连接池,比如:c3p0、dbcp,还有一些第三方工具,比如 dbutils 等,楼主认为 JDBC 是贯穿始终的,即使到了框架部分,也会对 JDBC 进行整合,此阶段还是自己手写 SQL 语句;下一个阶段就是 Hibernate,大家体会到了操作数据库可以不用自己手动编写 SQL,调用 Hibernate 提供的 API 即可。

JPA、SpringData JPA 、Hibernate和Mybatis 的区别和联系的更多相关文章

  1. 对比JPA 和Hibernate 和 Mybatis的区别

    1.JPA.Hibernate.Mybatis简单了解 1.JPA:本身是一种ORM规范,不是ORM框架.由各大ORM框架提供实现. 2.Hibernate:目前最流行的ORM框架,设计灵巧,文档丰富 ...

  2. Hibernate 和Mybatis的区别

    Hibernate 和Mybatis的区别   1.hibernate 入门门槛高,是一个标准的ORM框架(对象关系映射),不需要程序写sql,sql语句自动生成,对sql语句进行优化.修改比较困难. ...

  3. Hibernate 与mybatis的区别

    转自:https://blog.csdn.net/julinfeng/article/details/19821923 为方便以后准备面试,把一些常用的技术整理出来,会不定期更新. 首先简单介绍下两者 ...

  4. 如何回答面试中问到的Hibernate和MyBatis的区别

    这边主要是写给那些准备去面试的(没什么经验的)应聘者看的,为了在面试中更好的回答这个问题,我做一个简单的梳理和总结. 作为一名职场新人,经历过多次的面试,由于在简历中提及了Hibernate和MyBa ...

  5. hibernate和mybatis的区别

    本文出自 alicejiyayun原创 第一章     Hibernate与MyBatis Hibernate 是当前最流行的O/R mapping框架,它出身于sf.NET,现在已经成为Jboss的 ...

  6. hibernate与mybatis的区别

    我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和 ...

  7. 对于Hibernate和MyBatis的区别与利弊,谈谈你的看法

    Hibernate与MyBatis的对比: 1.MyBatis非常简单易学,与Hibernate相对复杂,门槛较高: 2.两者都是比较优秀的开源产品: 3.当系统属于二次开发,无法对于数据库结构做到控 ...

  8. Hibernate 和 MyBatis 的区别

    Hibernate 和 MyBatis 的增.删.查.改,对于业务逻辑层来说大同小异,对于映射层而言 Hibernate 的配置不需要接口和 SQL,相反 MyBatis 是需要的.对于 Hibern ...

  9. Hibernate 和 Mybatis的区别

    第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉得要用好Mybatis还是首先要先理解好H ...

随机推荐

  1. Servlet—文件上传

    什么是Commons? Apache的一个开源子项目,Commons-FileUpload是 Conmmons下子项目. Commons-FileUpload的作用? 1:该组件可以方便地嵌入JSP页 ...

  2. Python Web学习笔记之socket编程

    Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...

  3. Jquery 数组与字符串之间的转换

    var auth_list = []; $("input[name='auth_list']:checkbox").each(function () { if ($(this).a ...

  4. UVA644 Immediate Decodability

    UVA644 Immediate Decodability Trie Trie模板题 难度几乎相等的题P2580 于是他错误的点名开始了 对于每组数据都清空树太浪费时间,所以我们只要在需要新点时预先把 ...

  5. ImageLoader作用 AAAA

    https://github.com/nostra13/Android-Universal-Image-Loader ImageLoader作用 1.多线程下载图片,图片可以来源于网络,文件系统,项目 ...

  6. 20145327《网络对抗》——注入shellcode并执行和Return-to-libc攻击深入

    20145327<网络对抗>--注入shellcode并执行 准备一段Shellcode 老师的shellcode:\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68 ...

  7. vijos & codevs 能量项链 - 动态规划

    描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于 ...

  8. VC++实现程序重启的方法(转载)

    转载:http://blog.csdn.net/clever101/article/details/9327597 很多时候系统有很多配置项,修改了配置项之后能有一个按钮实现系统重启.所谓重启就是杀死 ...

  9. VS编译器之间相互打开的技巧

    例如:VS2010的工程在VS2012上打开,在工程属性里面 选择“常规” --> "平台工具集中"   选择 正在打开版本的型号.

  10. Python3基础 getattr 获取对象的指定属性值

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...