jpa findone怎么用_Jpa VS MyBatis,你用哪个?
經(jīng)常看到有小伙伴在討論 JPA 和 MyBatis 這兩個(gè)孰優(yōu)孰劣的問(wèn)題,其實(shí)松哥覺(jué)得這是一個(gè)偽命題,沒(méi)必要為這種問(wèn)題爭(zhēng)個(gè)面紅耳赤,每種框架有它存在的道理,也有各自擅長(zhǎng)的事情,今天松哥就和大家來(lái)聊聊這兩個(gè)框架,順便來(lái)了解一下大家在開(kāi)發(fā)中都用的是哪一個(gè)數(shù)據(jù)庫(kù)框架?
以下內(nèi)容,松哥盡量保持一個(gè)客觀中立立場(chǎng),大家不要噴我,說(shuō)的不完善的地方大家可以留言補(bǔ)充。
JPA
JPA是什么
Java Persistence API:用于對(duì)象持久化的 API
Java EE 5.0 平臺(tái)標(biāo)準(zhǔn)的 ORM 規(guī)范,使得應(yīng)用程序以統(tǒng)一的方式訪問(wèn)持久層?
JPA和Hibernate的關(guān)系
JPA 是 Hibernate 的一個(gè)抽象(就像JDBC和JDBC驅(qū)動(dòng)的關(guān)系);
JPA 是規(guī)范:JPA 本質(zhì)上就是一種 ORM 規(guī)范,不是ORM 框架,這是因?yàn)?JPA 并未提供 ORM 實(shí)現(xiàn),它只是制訂了一些規(guī)范,提供了一些編程的 API 接口,但具體實(shí)現(xiàn)則由 ORM 廠商提供實(shí)現(xiàn);
Hibernate 是實(shí)現(xiàn):Hibernate 除了作為 ORM 框架之外,它也是一種 JPA 實(shí)現(xiàn)
從功能上來(lái)說(shuō), JPA 是 Hibernate 功能的一個(gè)子集
JPA的供應(yīng)商
JPA 的目標(biāo)之一是制定一個(gè)可以由很多供應(yīng)商實(shí)現(xiàn)的 API,Hibernate 3.2+、TopLink 10.1+ 以及 OpenJPA 都提供了 JPA 的實(shí)現(xiàn),JPA 供應(yīng)商有很多,常見(jiàn)的有如下四種:
1.Hibernate
JPA 的始作俑者就是 Hibernate 的作者,Hibernate 從 3.2 開(kāi)始兼容 JPA。
2.OpenJPA
OpenJPA 是 Apache 組織提供的開(kāi)源項(xiàng)目。
3.TopLink
TopLink 以前需要收費(fèi),如今開(kāi)源了。
4.EclipseLink
JPA的優(yōu)勢(shì)
標(biāo)準(zhǔn)化: 提供相同的 API,這保證了基于JPA 開(kāi)發(fā)的企業(yè)應(yīng)用能夠經(jīng)過(guò)少量的修改就能夠在不同的 JPA 框架下運(yùn)行。
簡(jiǎn)單易用,集成方便: JPA 的主要目標(biāo)之一就是提供更加簡(jiǎn)單的編程模型,在 JPA 框架下創(chuàng)建實(shí)體和創(chuàng)建 Java 類(lèi)一樣簡(jiǎn)單,只需要使用 javax.persistence.Entity 進(jìn)行注解;JPA 的框架和接口也都非常簡(jiǎn)單。
可媲美JDBC的查詢(xún)能力: JPA的查詢(xún)語(yǔ)言是面向?qū)ο蟮?#xff0c;JPA定義了獨(dú)特的JPQL,而且能夠支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能夠提供的高級(jí)查詢(xún)特性,甚至還能夠支持子查詢(xún)。
支持面向?qū)ο蟮母呒?jí)特性: JPA 中能夠支持面向?qū)ο蟮母呒?jí)特性,如類(lèi)之間的繼承、多態(tài)和類(lèi)之間的復(fù)雜關(guān)系,最大限度的使用面向?qū)ο蟮哪P?/p>
....
JPA包含的技術(shù)
ORM 映射元數(shù)據(jù):JPA 支持 XML 和 JDK 5.0 注解兩種元數(shù)據(jù)的形式,元數(shù)據(jù)描述對(duì)象和表之間的映射關(guān)系,框架據(jù)此將實(shí)體對(duì)象持久化到數(shù)據(jù)庫(kù)表中。
JPA 的 API:用來(lái)操作實(shí)體對(duì)象,執(zhí)行CRUD操作,框架在后臺(tái)完成所有的事情,開(kāi)發(fā)者從繁瑣的 JDBC 和 SQL 代碼中解脫出來(lái)。
查詢(xún)語(yǔ)言(JPQL):這是持久化操作中很重要的一個(gè)方面,通過(guò)面向?qū)ο蠖敲嫦驍?shù)據(jù)庫(kù)的查詢(xún)語(yǔ)言查詢(xún)數(shù)據(jù),避免程序和具體的 SQL 緊密耦合。
MyBatis
什么是 MyBatis
MyBatis 也是一個(gè) Java 持久化框架,它通過(guò) XML 描述符或 Annotation 把對(duì)象與存儲(chǔ)過(guò)程或SQL語(yǔ)句關(guān)聯(lián)起來(lái)。與 JPA 這種對(duì)象關(guān)系映射(ORM)框架不同,MyBatis 并沒(méi)有將 Java 對(duì)象與數(shù)據(jù)庫(kù)表關(guān)聯(lián)起來(lái),而是將 Java 方法與 SQL 語(yǔ)句關(guān)聯(lián)。MyBatis 允許用戶(hù)充分利用數(shù)據(jù)庫(kù)的各種功能,例如存儲(chǔ)過(guò)程、視圖、各種復(fù)雜的查詢(xún)以及某數(shù)據(jù)庫(kù)的專(zhuān)有特性,其實(shí) MyBatis 最吸引松哥的地方就是完全控制 SQL 的執(zhí)行。
與 JDBC 相比,MyBatis 簡(jiǎn)化了查詢(xún)結(jié)果映射:SQL 語(yǔ)句在一行代碼中就能執(zhí)行。MyBatis 提供了一個(gè)映射引擎,聲明式的把 SQL 語(yǔ)句執(zhí)行結(jié)果與對(duì)象樹(shù)映射起來(lái)。通過(guò)使用一種內(nèi)建的類(lèi) XML 表達(dá)式語(yǔ)言,或者使用 Apache Velocity 集成的插件,SQL 語(yǔ)句可以被動(dòng)態(tài)的生成,這些特性都可以使開(kāi)發(fā)者更方便的使用 MyBatis。MyBatis 也支持聲明式數(shù)據(jù)緩存,當(dāng)一條SQL語(yǔ)句被標(biāo)記為“可緩存”后,首次執(zhí)行它時(shí)從數(shù)據(jù)庫(kù)取得的所有數(shù)據(jù)會(huì)被存儲(chǔ)在一段高速緩存中,今后執(zhí)行這條語(yǔ)句時(shí)就會(huì)從高速緩存中讀取結(jié)果,而不是再次命中數(shù)據(jù)庫(kù)。
MyBatis 優(yōu)勢(shì)
上手容易,也更加容易掌握。
由于自己掌握 SQL ,因此可以寫(xiě)出更加優(yōu)質(zhì)的 SQL ,提高 SQL 的執(zhí)行效率。
多表關(guān)聯(lián)查詢(xún)時(shí),MyBatis 要靈活一些,也更具備優(yōu)勢(shì)。
.....
怎么用
關(guān)于這兩個(gè)框架的用法,松哥在公眾號(hào)都寫(xiě)過(guò)專(zhuān)門(mén)的文章介紹,讀者可以翻一下歷史記錄,三年前還在 CSDN 寫(xiě)過(guò)一個(gè) MyBatis 專(zhuān)欄,有興趣的小伙伴可以去松哥專(zhuān)欄看看。
你用哪個(gè)
最后松哥來(lái)做一個(gè)小小的調(diào)查,看看大家在開(kāi)發(fā)中用的哪個(gè)?
大家也可以留言說(shuō)說(shuō)自己項(xiàng)目中用了哪一個(gè)數(shù)據(jù)持久化框架,出于什么樣的考慮用了該框架?
關(guān)注牧碼小子,后臺(tái)回復(fù) Java ,領(lǐng)取松哥為你精心準(zhǔn)備的Java干貨!往期文章一覽
1、工作之余,你是怎么提高技術(shù)的?
2、兩年了,我寫(xiě)了這些干貨!
3、想和大家談一點(diǎn)合作
4、一個(gè)Java程序猿眼中的前后端分離以及Vue.js入門(mén)
5、跟著平臺(tái)混了四年,現(xiàn)在要單飛了!
你點(diǎn)的每個(gè)在看,我都認(rèn)真當(dāng)成了喜歡總結(jié)
以上是生活随笔為你收集整理的jpa findone怎么用_Jpa VS MyBatis,你用哪个?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: snort入侵检测系统下载Linux,入
- 下一篇: 计算机一级考试word题主要,2017年