zoukankan      html  css  js  c++  java
  • JPA、SpringData JPA 、Hibernate和Mybatis 的区别和联系

     

    一、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 即可。

  • 相关阅读:
    为什么我要学习qt quick
    geometory Intersect
    删除kubernetes节点的正确姿势
    乞丐版docker私有仓库搭建
    kubernetes集群中由于某些原因导致etcd节点没有删干净,需要手动清理etcd节点
    k8s coredns设置上游name server
    虚拟机架设koolshare软路由
    文件类型特征码
    深入字节码 -- 计算方法执行时间
    启迪思维:二叉树
  • 原文地址:https://www.cnblogs.com/panchanggui/p/10405139.html
Copyright © 2011-2022 走看看