SpringData JPA、Hibernate、Mybatis三者的区别

目录

1.ORM 考虑

SpringData JPA

Hibernate

MyBatis

2.业务查询的区别

Spring Data JPA

Hibernate

Mybatis

3.可拓展性 

Spring Data JPA

 Hibernate

Mybatis

4.对缓存

 Spring Data JPA

Hibernate

Mybatis

5.难度性 

Spring Data JPA

Hibernate

Mybatis  

总述

Spring Data JPA 

Mybatis

Hibernate


1.ORM 考虑

SpringData JPA

  • 只是接口,一种规范,具体的实现还是ORM做的

Hibernate

  • 是完备的 ORM 框架,是符合 JPA 规范的,Hibernate 使用 JPA 就可以无需考虑数据库的兼容性问题。

MyBatis

  • 不完备的ORM框架,比单纯写 JDBC 肯定是方便一点,但无可避免还是要写SQL,且无法做到跨数据库 。

注:使用 Hibernate 的一个难点是,如何来设计对象之间的关系。如果是关系型数据库的话,表和表是通过外键来进行关联的。而在 ORM 中,则需要从面向对象的角度出发,来设计对象之间的关联关系。这个是需要思路上做一个转变的。

2.业务查询的区别

Spring Data JPA

  • 有基础的接口api ,可使用内置的增删改查方法

Hibernate

  • 有基础的查询方法,也可以根据具体的业务编写自定义的SQL

Mybatis

  • 需要手动写SQL,支持注解及xml的形式

3.可拓展性 

Spring Data JPA

  • 通过命名规范查询、注解查询规范数据类型,无需关心数据库的差异。(注:但是通过本地化SQL查询的话,就不易扩展)

 Hibernate

  • 与数据库具体的关联都在XML中,不用关心数据库类型。

Mybatis

  • 所有SQL都是依赖数据库书写的,所以扩展性,迁移性比较差 

4.对缓存

 Spring Data JPA

  • 可以通过自己的缓存或第三方缓存

Hibernate

  • Hibernate有三级缓存,而二级缓存是在SessionFactory生成的配置文件中配置,然后再在具体的表-对象映射中配置其缓存类型

Mybatis

  • 具有二级缓存,二级缓存在每个具体的表-对象映射中配置,针对不同的表可以自定义不同的缓存机制。可通过Cache-ref实现在命名空间中共享相同的缓存配置和实例

注:Hibernate和Mybatis的二级缓存也可以通过实现你自己的缓存或其他第三方缓存方案,创建适配器来完全覆盖其原缓存

5.难度性 

Spring Data JPA

  • 易上手,通过命名规范、注解查询简化查询操作。

Hibernate

  • 开发难度要大于Mybatis、Spring Data。主要是由于Hibernate封装了完整的对象关系映射机制,以至于内部的实现比较复杂、庞大,学习周期较长。

Mybatis  

  • 主要依赖于SQL的编写与ResultMap的映射。

总述

Spring Data JPA 

  • 极大的简化了数据库访问,可以通过命名规范、注解的方式较快的编写SQL。

Mybatis

  • 学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。

Hibernate

  • 对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的缺点是学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。


---------------------
作者:C1Zer0WN
来源:CSDN
原文:https://blog.csdn.net/qq_36543562/article/details/113244030
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1、内存

程序为什么需要内存 程序运行的目的:程序运行是为了得到一定的结果,程序运行其实是在做一系列的数据计算,所以:程序代码数据;程序运行的目的不外乎2个:过程、结果; 用函数来类比:…

Map 遍历取值及jstl的取值

Map 遍历取值及jstl的取值 学习了&#xff1a;http://blog.csdn.net/yanjiaye520/article/details/17354239 1、Java map的便利取值 Java代码 收藏代码 Map<String,String> map new HashMap<String,String>(); map.put("key1", "value1");…

基于CAP组件实现补偿事务与幂等性保障

【.NET Core】| 总结/Edison Zhou1补偿事务和幂等性在微服务架构下&#xff0c;我们会采用异步通信来对各个微服务进行解耦&#xff0c;从而我们会用到消息中间件来传递各个消息。 补偿事务某些情况下&#xff0c;消费者需要返回值以告诉发布者执行结果&#xff0c;以便于发布者…

Docker与k8s

前言 随着k8s 作为容器编排解决方案变得越来越流行&#xff0c;有些人开始拿 Docker 和 k8s进行对比&#xff0c;不禁问道&#xff1a;Docker 不香吗&#xff1f; k8s 是kubernets的缩写&#xff0c;’8‘代表中间的八个字符。 其实 Docker 和 k8s 并非直接的竞争对手&#xff…

Linux下启动tomcat报java.lang.OutOfMemoryError: PermGen space

2019独角兽企业重金招聘Python工程师标准>>> 一、错误信息 java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav…

Redis安装[Windows]

一. redis下载地址: https://github.com/ServiceStack/redis-windows/tree/master/downloads 根据需要的下载对应版本*.zip即可.(我这里是win7x64) 二.使用 1. 下载之后解压到你相应的目录下: 1 文件介绍&#xff1a; 2 redis-benchmark.exe #基准测试 3 redis-check-aof.e…

简练软考知识点整理-项目启动过程组

启动过程组包含定义一个新项目或现有项目的一个新阶段&#xff0c;授权开始该项目或阶段的一组过程。在启动过程中&#xff0c;定义初步范围和落实初步财务资源&#xff0c;识别那些将相互作用并影响项目总体结果的内外部干系人&#xff0c;选定项目经理&#xff08;如果尚未安…

在 ASP.NET Core 中上传文件

简介文件上传是指将媒体文件&#xff08;本地文件或网络文件&#xff09;从客户端上传至服务器存储。ASP.NET Core 支持使用缓冲的模型绑定&#xff08;针对较小文件&#xff09;和无缓冲的流式传输&#xff08;针对较大文件&#xff09;上传一个或多个文件。缓冲和流式传输是上…

Paxos算法详解

Paxos、Raft分布式一致性算法应用场景一文讲述了分布式一致性问题与分布式一致性算法的典型应用场景。作为分布式一致性代名词的Paxos算法号称是最难理解的算法。本文试图用通俗易懂的语言讲述Paxos算法。 一、Paxos算法背景 Paxos算法是Lamport宗师提出的一种基于消息传递的分…

LeetCode 322. Coin Change

原题 You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, …

Teiid:数据虚拟化Data Virtualization平台

2019独角兽企业重金招聘Python工程师标准>>> Teiid介绍 http://teiid.jboss.org/ 数据虚拟化的定义 https://en.wikipedia.org/wiki/Data_virtualization http://www.denodo.com/en/data-virtualization/overview 数据虚拟化的文章 Sick of ETL? Database virtuali…

如何仿造一个websocket请求?

之前两次singnalr、 websocket实时推送相关&#xff1a;• .NET WebSockets 核心原理初体验[1]• SignalR 从开发到生产部署避坑指南[2]tag&#xff1a;浏览器--->nginx--> server其中提到nginx默认不会为客户端转发Upgrade、Connection标头&#xff0c; 因为为了让被代理…

【转】为什么自动车完全不可以犯错误

为什么自动车完全不可以犯错误 有人跟我讲&#xff0c;我对Google的自动车要求太苛刻了。人无完人&#xff0c;所以Google的产品也不需要是完美的&#xff0c;只要“够好用”就有市场。世界上有那么多糟糕的司机&#xff0c;酒后驾车的&#xff0c;开车时发短信的&#xff0c;打…

从“互联网+教育”到“教育+互联网”——互联网文化基因视域下的审思

作者信息 朱敬/广西师范大学教育学部教授&#xff0c;教育学博士&#xff0c;博士生导师&#xff1b; 蔡建东/河南大学教育学部教授&#xff0c;教育学博士。 本文摘要 近年来国务院与教育部文件逐渐使用“教育互联网”一词&#xff0c;从“互联网教育”到“教育互联网”&a…

Node.js Stream - 基础篇

背景 在构建较复杂的系统时&#xff0c;通常将其拆解为功能独立的若干部分。这些部分的接口遵循一定的规范&#xff0c;通过某种方式相连&#xff0c;以共同完成较复杂的任务。譬如&#xff0c;shell通过管道|连接各部分&#xff0c;其输入输出的规范是文本流。 在Node.js中&am…

Axure RP使用攻略--动态面板的用途(8)

写了几个Axure教程之后发现&#xff0c;可能教程的起点有些高了&#xff0c;过分的去讲效果的实现&#xff0c;而忽略了axure功能以及基础元件的使用&#xff0c;那么从这个教程开始&#xff0c;把这些逐渐的展开讲解。 关于动态面板 动态面板是axure原型制作中使用非常频繁的一…

ABP 6.0.0-rc.1的新特性

2022-07-26官方发布ABP 6.0.0-rc.1版本&#xff0c;本文挑选了几个新特性进行了介绍&#xff0c;主要包括LeptonX Lite默认主题、OpenIddict模块&#xff0c;以及如何将Identity Server迁移到OpenIddict。据ABP官方公众号介绍&#xff0c;ABP 6.0.0稳定版的计划发布日期为2022-…

Java并发包--线程池框架

转载请注明出处&#xff1a;http://www.cnblogs.com/skywang12345/p/3509903.html 线程池架构图 线程池的架构图如下&#xff1a; 1. Executor 它是"执行者"接口&#xff0c;它是来执行任务的。准确的说&#xff0c;Executor提供了execute()接口来执行已提交的 Runna…

c 试水解码jpeg图片比特流(已成功解码)

找到一张采用霍夫曼通用DC,AC编码表的图片&#xff0c;提取出此图片的比特流准备对它解码&#xff0c;再反推怎样编码。 下图是此图片比特流前100个字节。解码是每次读一字节&#xff0c;对这8比特解码&#xff0c;如8比特不能解码&#xff0c;再读入一字节。因为霍夫曼表最多…

Raft算法详解

Raft算法属于Multi-Paxos算法&#xff0c;它是在Multi-Paxos思想的基础上&#xff0c;做了一些简化和限制&#xff0c;比如增加了日志必须是连续的&#xff0c;只支持领导者、跟随者和候选人三种状态&#xff0c;在理解和算法实现上都相对容易许多 从本质上说&#xff0c;Raft算…