jpa findone怎么用_Jpa VS MyBatis,你用哪個?

經常看到有小伙伴在討論 JPA 和 MyBatis 這兩個孰優孰劣的問題,其實松哥覺得這是一個偽命題,沒必要為這種問題爭個面紅耳赤,每種框架有它存在的道理,也有各自擅長的事情,今天松哥就和大家來聊聊這兩個框架,順便來了解一下大家在開發中都用的是哪一個數據庫框架?

以下內容,松哥盡量保持一個客觀中立立場,大家不要噴我,說的不完善的地方大家可以留言補充。

JPA

JPA是什么

  1. Java Persistence API:用于對象持久化的 API

  2. Java EE 5.0 平臺標準的 ORM 規范,使得應用程序以統一的方式訪問持久層?96ef34874e7774aa90273856f0e28637.png

JPA和Hibernate的關系

  1. JPA 是 Hibernate 的一個抽象(就像JDBC和JDBC驅動的關系);

  2. JPA 是規范:JPA 本質上就是一種 ORM 規范,不是ORM 框架,這是因為 JPA 并未提供 ORM 實現,它只是制訂了一些規范,提供了一些編程的 API 接口,但具體實現則由 ORM 廠商提供實現;

  3. Hibernate 是實現:Hibernate 除了作為 ORM 框架之外,它也是一種 JPA 實現

  4. 從功能上來說, JPA 是 Hibernate 功能的一個子集

JPA的供應商

JPA 的目標之一是制定一個可以由很多供應商實現的 API,Hibernate 3.2+、TopLink 10.1+ 以及 OpenJPA 都提供了 JPA 的實現,JPA 供應商有很多,常見的有如下四種:
1.Hibernate
JPA 的始作俑者就是 Hibernate 的作者,Hibernate 從 3.2 開始兼容 JPA。
2.OpenJPA
OpenJPA 是 Apache 組織提供的開源項目。
3.TopLink
TopLink 以前需要收費,如今開源了。
4.EclipseLink

JPA的優勢

  1. 標準化: 提供相同的 API,這保證了基于JPA 開發的企業應用能夠經過少量的修改就能夠在不同的 JPA 框架下運行。

  2. 簡單易用,集成方便: JPA 的主要目標之一就是提供更加簡單的編程模型,在 JPA 框架下創建實體和創建 Java 類一樣簡單,只需要使用 javax.persistence.Entity 進行注解;JPA 的框架和接口也都非常簡單。

  3. 可媲美JDBC的查詢能力: JPA的查詢語言是面向對象的,JPA定義了獨特的JPQL,而且能夠支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能夠提供的高級查詢特性,甚至還能夠支持子查詢。

  4. 支持面向對象的高級特性: JPA 中能夠支持面向對象的高級特性,如類之間的繼承、多態和類之間的復雜關系,最大限度的使用面向對象的模型

  5. ....

JPA包含的技術

  1. ORM 映射元數據:JPA 支持 XML 和 JDK 5.0 注解兩種元數據的形式,元數據描述對象和表之間的映射關系,框架據此將實體對象持久化到數據庫表中。

  2. JPA 的 API:用來操作實體對象,執行CRUD操作,框架在后臺完成所有的事情,開發者從繁瑣的 JDBC 和 SQL 代碼中解脫出來。

  3. 查詢語言(JPQL):這是持久化操作中很重要的一個方面,通過面向對象而非面向數據庫的查詢語言查詢數據,避免程序和具體的 SQL 緊密耦合。

MyBatis

什么是 MyBatis

MyBatis 也是一個 Java 持久化框架,它通過 XML 描述符或 Annotation 把對象與存儲過程或SQL語句關聯起來。與 JPA 這種對象關系映射(ORM)框架不同,MyBatis 并沒有將 Java 對象與數據庫表關聯起來,而是將 Java 方法與 SQL 語句關聯。MyBatis 允許用戶充分利用數據庫的各種功能,例如存儲過程、視圖、各種復雜的查詢以及某數據庫的專有特性,其實 MyBatis 最吸引松哥的地方就是完全控制 SQL 的執行。

與 JDBC 相比,MyBatis 簡化了查詢結果映射:SQL 語句在一行代碼中就能執行。MyBatis 提供了一個映射引擎,聲明式的把 SQL 語句執行結果與對象樹映射起來。通過使用一種內建的類 XML 表達式語言,或者使用 Apache Velocity 集成的插件,SQL 語句可以被動態的生成,這些特性都可以使開發者更方便的使用 MyBatis。MyBatis 也支持聲明式數據緩存,當一條SQL語句被標記為“可緩存”后,首次執行它時從數據庫取得的所有數據會被存儲在一段高速緩存中,今后執行這條語句時就會從高速緩存中讀取結果,而不是再次命中數據庫。

MyBatis 優勢

  1. 上手容易,也更加容易掌握。

  2. 由于自己掌握 SQL ,因此可以寫出更加優質的 SQL ,提高 SQL 的執行效率。

  3. 多表關聯查詢時,MyBatis 要靈活一些,也更具備優勢。

  4. .....

怎么用

關于這兩個框架的用法,松哥在公眾號都寫過專門的文章介紹,讀者可以翻一下歷史記錄,三年前還在 CSDN 寫過一個 MyBatis 專欄,有興趣的小伙伴可以去松哥專欄看看。

你用哪個

最后松哥來做一個小小的調查,看看大家在開發中用的哪個?

大家也可以留言說說自己項目中用了哪一個數據持久化框架,出于什么樣的考慮用了該框架?

7c18ad815476ef8cf44213d54502f117.gifc476453ec40239e2e6f4545b0bb37949.png關注牧碼小子,后臺回復 Java ,領取松哥為你精心準備的Java干貨!7c18ad815476ef8cf44213d54502f117.gif

往期文章一覽

1、工作之余,你是怎么提高技術的?

2、兩年了,我寫了這些干貨!

3、想和大家談一點合作

4、一個Java程序猿眼中的前后端分離以及Vue.js入門

5、跟著平臺混了四年,現在要單飛了!

4bc62cef8018dc51456165c26847b64d.png你點的每個在看,我都認真當成了喜歡

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538680.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538680.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538680.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

國家開放大學本科計算機應用基礎,【(精華版)最新國家開放大學電大本科《計算機應用基礎》網絡課網考形考作業一及三試題答案】.docx...

【(精華版)最新國家開放大學電大本科《計算機應用基礎》網絡課網考形考作業一及三試題答案】(精華版)最新國家開放大學電大本科《計算機應用基礎》網絡課網考形考作業一及三試題答案 盜傳必究 形考作業一 一、單選題 1當前的計算機一般被認為是第四代計算機,它所采用…

Reset Password 重置密碼 (CentOS 5,6,7 ; Juniper Networks: SRX100 )

一些重置root 密碼的文檔分享(來自官網): CentOS 5,6,7 Juniper Networks : SRX100 鏈接:https://share.weiyun.com/5BM4kwK 密碼:f3t5xu轉載于:https://www.cnblogs.com/ling3blog/p/905018…

python正則表達式中的轉義字符_python 正則表達式之轉義字符

最近在整理python相關的知識,使用python對網站進行爬取數據的時候,需要使用到轉義字符,之前對轉義字符理解一直比較模糊,并且在python中還有一個叫原生字符r。所以通過網上調查資料對該內容進行整理,已備不時之需。 字…

計算機控制系統a卷-答案,計算機控制系統2010-2011年試題A答案

濟南大學2010 ~2011學年第一學期課程考試試卷(A卷)4、振鈴現象:(雖然閉環系統輸出較快地趨向于穩態值)……課 程 計算機過程控制系統 授課教師 王小平 數字調節器輸出u(kT)以2T為周期上下擺動。………考試時間 2010年 12 月 30日 考試班級 … ……學 號 …

非root用戶ssh 執行 sudo遠程機器免密鑰

非root用戶ssh 執行 sudo遠程機器免密鑰 # 1、登陸192.168.1.10 ssh-keygen -t rsa # 一路回車 # 將公鑰添加到認證文件中 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 并設置authorized_keys的訪問權限 chmod 600 ~/.ssh/authorized_keys [rootwebserver ~]# c…

分數的拆分原理和方法_常見的節稅原理你知道嗎?

節稅可以幫助大家合理的降低稅收支出,然后實現企業以及利益的最大化。但是節稅的時候一般都會使用一些節稅原理,因為不同的結節稅原理會有不同的節稅方法,這樣節稅效果也是不同的,那么生活中有哪些常見的節稅原理呢?第…

Flume實戰監聽文件夾內文件變化

Flume官網有多種場景的source,sink,channel的配置 1、flume安裝目錄下新建文件夾 example 2、在example下新建文件 spooldir-logger.conf內容如下: a1.sources r1 a1.sinks k1 a1.channels c1# Describe/configure the source a1.source…

python如何獲取輸入_python如何從鍵盤獲取輸入實例

python中使用input()函數來獲取用戶輸入 函數 input() 讓程序暫停運行,等待用戶輸入一些文本,獲取用戶的輸入后,Python將其存儲到一個變量中,以方便后期使用。 name input("Tell me your name,and I will repeat it back to…

cad打印本計算機未配置,CAD打印的基本設置詳細教程

CAD打印的基本設置詳細教程開始畫圖之前我們就考慮到打印的需要,要用多大紙張,打印比例應該設置成多少,打印后的字高、線寬、顏色應該設置成多少,在繪制圖形的時候,這些為打印而做的準備工作必須做好。要想正確地打印圖…

原 BinaryWriter和BinaryReader(二進制文件的讀寫)

原文 BinaryWriter和BinaryReader(二進制文件的讀寫) C#的FileStream類提供了最原始的字節級上的文件讀寫功能,但我們習慣于對字符串操作,于是StreamWriter和 StreamReader類增強了FileStream,它讓我們在字符串級別上操…

python redis 消息隊列_Python的Flask框架應用調用Redis隊列數據的方法

任務異步化打開瀏覽器,輸入地址,按下回車,打開了頁面。于是一個HTTP請求(request)就由客戶端發送到服務器,服務器處理請求,返回響應(response)內容。 我們每天都在瀏覽網…

go ip過濾_用Go實現自己的爬蟲

作者:Masamune在日常生活中,我們時常會遇到一些采集數據相關的需求,比如獲取一些官方數據整理到excel表中進行統計,聚合一些網頁新聞提高自己的閱讀效率等等。雖然許多爬蟲教程都是用python寫的,但是我認為Go語言是比p…

Flume實戰采集文件內容存入HDFS

1、flume安裝目錄下新建文件夾 example 2、在example下新建文件 log-hdfs.conf 內容如下: # Name the components on this agent a1.sources r1 a1.sinks k1 a1.channels c1#exec 指的是命令 # Describe/configure the source a1.sources.r1.type exec #F…

總結計算機語言的基本元素,認識程序設計中基本元素教案.doc

曲靖師院計算機科學與工程學院學生試講教案表課題:認識程序中的基本元素 年級:高一 課時:1課時授課時間:20分鐘 講授者:秦巧林 指導教師:崔麗梅教學目標知識與技能1. 掌握計算機程序中常用的常量、變量、函…

python海龜繪圖圓形_python之海龜繪圖

1. 基本功能介紹 在海龜作圖中,我們可以編寫指令讓一個虛擬的(想象中的)海龜在屏幕上來回移動。這個海龜帶著一只鋼筆,我們可以讓海龜無論移動到哪都使用這只鋼筆來繪制線條。通過編寫代碼,以各種很酷的模式移動海龜&a…

PLSQL Developer導入csv文件到oracle

csv文件內容: 要導入的表結構 create table RPT_MONILUCE_2_P01 ( imsi NUMBER, road_line NUMBER, ci NUMBER, diff NUMBER, rn NUMBER, sdate DATE, report_id NUMBER(20) ) 步驟: 1、在csv第一行上增加…

erwin 不能輸入中文_國產開源建模軟件PDMan與國外商業建模軟件ERwin的主要功能比較...

在數據庫建模的過程中,我們經常會使用到ERwin或者Power Designer之類的建模軟件,來構建我們的邏輯模型和物理模型。但是這類軟件都屬于商業軟件,需要企業購買相應的許可證授權。有些時候,我們會在沒有購買這類商業建模軟件的環境下…

Confluence 6 workbox 通知包含了什么

當一個用戶在 Confluence 中進行下面的操作的時候,workbox 將會顯示為通知: 分享(Shares) 你的頁面或者博客頁面。 提及(Mentions) 你的頁面,博客頁面,回復或者任務。你 關注&#x…

已知一點經緯度,方位角,距離,求另一點經緯度

參考了博文:http://blog.csdn.net/pyx6119822/article/details/52298037 ------------------------------------------------ package hellotest;public class LonLatTest3 {/** 大地坐標系資料WGS-84 長半徑a6378137 短半徑b6356752.3142 扁率f1/298.2572236*//**…

計算機一級excel如何選擇2個,2017年計算機一級excel操作題(2)

(3)建立和編輯圖表選擇工作簿中需要編輯的表單,為其添加圖表,其具體操作如下:步驟1選取“電腦城日出貨統計表”的“配件”和“所占比例”兩列,選擇【插入一圖表】命令,在彈出的“圖表向導”對話框“標準類型”的“圖表…