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.pswp.cn/news/283932.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/283932.shtml
英文地址,請注明出處:http://en.pswp.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算…