日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

jpa 不自动建表_如何来实现SpringBoot应用的JPA数据持久化和热插拔

發(fā)布時(shí)間:2025/3/21 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jpa 不自动建表_如何来实现SpringBoot应用的JPA数据持久化和热插拔 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

數(shù)據(jù)持久化

JPA ( Java Persistence API)是用于管理Java EE和Java SE環(huán)境中的持久化,以及對(duì)象/關(guān)系映射的Java API。

JPA最新規(guī)范為“JSR 338: Java Persistence 2.1”( htps:/cp.org/e/e/ail?id=338)。目前,市面上實(shí)現(xiàn)該規(guī)范的常見(jiàn)JPA框架有EclipseLink ( ht://www.eclipse.org/ecipselink)、Hibermate( ht:t:hib/mate.or/orom )、Apache OpenJPA ( htp://penipapache.org/)等。
本文主要介紹以Hibernate為實(shí)現(xiàn)的JPA。

JPA的產(chǎn)生背景

在JPA產(chǎn)生之前,圍繞如何簡(jiǎn)化數(shù)據(jù)庫(kù)操作的相關(guān)討論已經(jīng)是層出不窮,眾多廠商和開(kāi)源社區(qū)也都提供了持久層框架的實(shí)現(xiàn),其中ORM框架最為開(kāi)發(fā)人員所關(guān)注。

ORM ( Object Relational Mapping,對(duì)象關(guān)系映射)是-一種用于實(shí)現(xiàn)面向?qū)ο缶幊陶Z(yǔ)言里不同類(lèi)型系統(tǒng)的數(shù)據(jù)之間轉(zhuǎn)換的程序技術(shù)。由于面向?qū)ο髷?shù)據(jù)庫(kù)系統(tǒng)( OODBS)的實(shí)現(xiàn)在技術(shù)上還存在難點(diǎn),目前,市面上流行的數(shù)據(jù)庫(kù)還是以關(guān)系型數(shù)據(jù)庫(kù)為主。

由于關(guān)系型數(shù)據(jù)庫(kù)使用的SQL語(yǔ)言是一-種非過(guò)程化的面向集合的語(yǔ)言,而目前許多應(yīng)用仍然是由高級(jí)程序設(shè)計(jì)語(yǔ)言( 如Java)來(lái)實(shí)現(xiàn)的,但是高級(jí)程序設(shè)計(jì)語(yǔ)言是過(guò)程化的,而且是面向單個(gè)數(shù)據(jù)的,這使得SQL與它之間存在著不匹配,這種不匹配稱(chēng)為“阻抗失配”。由于“阻抗失配”的存在,使得開(kāi)發(fā)人員在使用關(guān)系型數(shù)據(jù)庫(kù)時(shí)不得不花很多功夫去完成兩種語(yǔ)言之間的相互轉(zhuǎn)化。

而ORM框架的產(chǎn)生,正是為了簡(jiǎn)化這種轉(zhuǎn)化操作。在編程語(yǔ)言中,使用ORM就可以使用面向?qū)ο蟮姆绞絹?lái)完成數(shù)據(jù)庫(kù)的操作。

ORM框架的出現(xiàn),使直接存儲(chǔ)對(duì)象成為可能,它們將對(duì)象拆分成SQL語(yǔ)句,從而來(lái)操作數(shù)據(jù)庫(kù)。但是不同的ORM框架,在使用上存在比較大的差異,這也導(dǎo)致開(kāi)發(fā)人員需要學(xué)習(xí)各種不同的ORM框架,增加了技術(shù)學(xué)習(xí)的成本。

而JAP規(guī)范就是為了解決這個(gè)問(wèn)題:規(guī)范ORM框架,使用ORM框架統(tǒng)- -的接口 和用法。這樣在采用面向接口編程的技術(shù)中,即便更換了不同的ORM框架,也無(wú)須變更業(yè)務(wù)邏輯。

最早的JPA規(guī)范是由Java官方提出的,隨JavaEE5規(guī)范一同發(fā)布。

實(shí)體( Entity )

實(shí)體是輕量級(jí)的持久化域?qū)ο蟆Mǔ?#xff0c;實(shí)體表示關(guān)系數(shù)據(jù)庫(kù)中的表,并且每個(gè)實(shí)體實(shí)例對(duì)應(yīng)于該表中的行。實(shí)體的主要編程工件是實(shí)體類(lèi),盡管實(shí)體可以使用輔助類(lèi)。

在EJB3之前,EJB 主要包含三種類(lèi)型:會(huì)話bean、消息驅(qū)動(dòng)bean、實(shí)體bean。但自EJB 3.0開(kāi)始,實(shí)體bean被單獨(dú)分離出來(lái),形成了新的規(guī)范: JPA。所以,JPA完全可以脫離EJB 3來(lái)使用。實(shí)體是JPA中的核心概念。

實(shí)體的持久狀態(tài)通過(guò)持久化字段或持久化屬性來(lái)表示。這些字段或?qū)傩允褂脤?duì)象/關(guān)系映射注解將實(shí)體和實(shí)體關(guān)系映射到基礎(chǔ)數(shù)據(jù)存儲(chǔ)中的關(guān)系數(shù)據(jù)。

與實(shí)體在概念上比較接近的另外一個(gè)領(lǐng)域?qū)ο笫侵祵?duì)象。實(shí)體是可以被跟蹤的,通常會(huì)有一個(gè)主鍵(唯一標(biāo)識(shí))來(lái)追蹤其狀態(tài)。而值對(duì)象則沒(méi)有這種標(biāo)識(shí),我們只關(guān)心值對(duì)象的屬性。

Spring Data JPA概述

Spring Data JPA是更大的Spring Data家族的一部分,使得輕松實(shí)現(xiàn)基于JPA的存儲(chǔ)庫(kù)變得更容易。該模塊用于處理對(duì)基于JPA的數(shù)據(jù)訪問(wèn)層的增強(qiáng)支持。它使更容易構(gòu)建基于使用Spring數(shù)據(jù)訪問(wèn)技術(shù)棧的應(yīng)用程序。

Spring Data JPA對(duì)于JPA的支持則是更近-步。使用Spring Data JPA,開(kāi)發(fā)者無(wú)須過(guò)多關(guān)注EntityManager的創(chuàng)建、事務(wù)處理等JPA相關(guān)的處理,這基本上也是作為一個(gè) 開(kāi)發(fā)框架而言所能做到的極限了,甚至Spring Data JPA讓你連實(shí)現(xiàn)持久層業(yè)務(wù)邏輯的工作都省了,唯-要做的,就只是聲明持久層的接口,其他都交給Spring Data JPA來(lái)幫你完成。

Spring Data JPA就是這么強(qiáng)大,讓你的數(shù)據(jù)持久層開(kāi)發(fā)工作簡(jiǎn)化,只需聲明一個(gè)接口。比如,你聲明了一個(gè)findUserBylId0,Spring Data JPA就能判斷出這是根據(jù)給定條件的ID查詢出滿足條件的User對(duì)象,而其中的實(shí)現(xiàn)過(guò)程開(kāi)發(fā)者無(wú)須關(guān)心,這一-切都交予Spring Data JPA來(lái)完成。

對(duì)于普通開(kāi)發(fā)者而言,自己實(shí)現(xiàn)應(yīng)用程序的數(shù)據(jù)訪問(wèn)層是一件極 其繁瑣的過(guò)程。開(kāi)發(fā)者必須編寫(xiě)太多的樣板代碼來(lái)執(zhí)行簡(jiǎn)單查詢、分頁(yè)和審計(jì)。Spring Data JPA旨在通過(guò)將努力減少到實(shí)際需要的量來(lái)顯著改進(jìn)數(shù)據(jù)訪問(wèn)層的實(shí)現(xiàn)。作為開(kāi)發(fā)人員,只需要編寫(xiě)存儲(chǔ)庫(kù)的接口,包括自定義查詢方法,而這些接口的實(shí)現(xiàn),Spring Data JPA將會(huì)自動(dòng)提供。

Spring Data JPA包含如下特征。

●基于Spring和JPA來(lái)構(gòu)建復(fù)雜的存儲(chǔ)庫(kù)。

支持Querydsl ( htp://ww.querydsl.com)謂詞,因此支持類(lèi)型安全的JPA查詢。

域類(lèi)的透明審計(jì)。

具備分頁(yè)支持、動(dòng)態(tài)查詢執(zhí)行、集成自定義數(shù)據(jù)訪問(wèn)代碼的能力。

在引導(dǎo)時(shí)驗(yàn)證帶@Query注解的查詢。

●支持基于XML的實(shí)體映射。

通過(guò)引入@EnableJpaRepositories來(lái)實(shí)現(xiàn)基于JavaConfig的存儲(chǔ)庫(kù)配置。

如何使用Spring Data JPA

在項(xiàng)目中使用spring- data-jpa的推薦方法是使用依賴關(guān)系管理系統(tǒng)。下 面是使用Gradle構(gòu)建的示例。

dependencies {
compile ' org. spr ingf ramework. data:spring-data-jpa:2.0.0.M4 '
}

在代碼中,我們只需聲明繼承自Spring Data JPA中的接口。

import org. springfr amework. data. jpa. repository .JpaRepository;
public interface UserRepository extends JpaRepository<User, Long>{
ListfindByNameLike (String name) ;

在這個(gè)例子中,代碼繼承自Spring Data JPA中的JpaRepository接口,而后聲明相關(guān)的方法即可。比如聲明findByNameLike,就能自動(dòng)實(shí)現(xiàn)通過(guò)名稱(chēng)來(lái)模糊查詢的方法。

Spring Data JPA的核心概念

SpringData存儲(chǔ)庫(kù)抽象中的中央接口是Repository。它將域類(lèi)及域類(lèi)的ID類(lèi)型作為類(lèi)型參數(shù)進(jìn)行管理。此接口主要作為標(biāo)記接口捕獲要使用的類(lèi)型,并幫助發(fā)現(xiàn)擴(kuò)展此接口。而CrudReposi-tory為受管理的實(shí)體類(lèi)提供復(fù)雜的CRUD功能。

public interface CrudRepository<T, ID extends Serializable>
extends Repository<T, ID> {
S save(S entity); // (1)T findOne (ID primaryKey) ;? // (2)Iterable findAll () ;? // (3)Long count() ; // (4)void delete(T entity) ; // (5)boolean exists(ID primaryKey); // (6)//省略更多方法...

CrudRepository接口中的方法含義如下。

(1)保存給定實(shí)體。

(2)返回由給定ID標(biāo)識(shí)的實(shí)體。

(3)返回所有實(shí)體。

(4)返回實(shí)體的數(shù)量。

(5)刪除給定的實(shí)體。

(6)指示是否存在具有給定ID的實(shí)體。

同時(shí)還提供其他特定的持久化技術(shù)的抽象,比如JpaRepository或MongoRepository,這些接口擴(kuò)展了CrudRepository。

在CrudRepository的頂部有一個(gè)PagingAndSortingRepository 抽象,它增加了額外的方法來(lái)簡(jiǎn)化對(duì)實(shí)體的分頁(yè)訪問(wèn)。

public interface PagingAndSortingRepository<T, ID extends Serializable>
extends CrudRepository<T, ID> {
IterablefindAll (Sort sort) ;
PagefindAll (Pageable pageable) ;
}

實(shí)現(xiàn)熱插拔

對(duì)于Java項(xiàng)目而言,在開(kāi)發(fā)過(guò)程中,一個(gè)非常大的問(wèn)題在于,每次在修改完文件之后都需要重新編譯、啟動(dòng),才能查看到最新的修改效果,這極大影響了開(kāi)發(fā)效率。因此, Spring Boot提供了幾種熱插拔( Hot Swapping)方式。本節(jié)主要介紹如何來(lái)實(shí)現(xiàn)Spring Boot應(yīng)用的熱插拔。

重新加載靜態(tài)內(nèi)容

有多種熱加載的方式,推薦的方法是使用spring-boot-devtools,因?yàn)樗峁┝祟~外的功能,例如,支持快速應(yīng)用程序重啟和LiveReload及智能的開(kāi)發(fā)時(shí)配置(如模板緩存)。

以下是在Maven添加Devtools的方式。

<dependencies>
<dependency>
<groupId>org. springframework.bootgroupId>
<arti factId>spring-boot-devtoolsarti factId>
<optional>trueoptional>
dependency>
dependencies>

在Gradle添加Devtools則更加多簡(jiǎn)潔。

dependencies{
compile ("org. spr ingframework .boot :spring-boot-devtools")
}

Devtools通過(guò)監(jiān)視類(lèi)路徑的變更來(lái)實(shí)現(xiàn)熱加載。這意味著靜態(tài)資源更改必須構(gòu)建才能使更改生效。不同的IDE觸發(fā)更新的方式有所不同。默認(rèn)情況下,在Eclipse中,保存修改的文件將導(dǎo)致類(lèi)路徑被更新并觸發(fā)重新啟動(dòng)。在IntelliJ IDEA中,構(gòu)建項(xiàng)目( Build -→Make Project )將具有相同的效果。

在IDE中運(yùn)行(特別是調(diào)試)是另外-一個(gè)非常好的開(kāi)發(fā)方式,因?yàn)閹缀跛鞋F(xiàn)代IDE都允許重新加載靜態(tài)資源,通常還可以熱部署Java類(lèi)的更改。

LiveReload

spring- boot- devtools模塊包括一個(gè)嵌入式LiveReload 服務(wù)器,可以在資源更改時(shí)用于觸發(fā)瀏覽器刷新。ht/iv/reload.com/excensions/ 網(wǎng)站為Chrome、Firefox 和Safari等免費(fèi)提供了LiveReload瀏覽器的擴(kuò)展程序。

如果不想在應(yīng)用程序運(yùn)行時(shí)啟動(dòng)LiveReload服務(wù)器,則可以將spring devtools.livereload.enabled屬性設(shè)置為false。

需要注意的是,一次只能運(yùn)行一個(gè)LiveReload服務(wù)器。應(yīng)用程序啟動(dòng)之前,請(qǐng)確保沒(méi)有其他LiveReload服務(wù)器正在運(yùn)行。如果從IDE啟動(dòng)多個(gè)應(yīng)用程序,則只有第一個(gè)應(yīng)用程序?qū)?支持LiveReload。

重新加載模板

Spring Boot在大多數(shù)模板技術(shù)中,都有包括禁用緩存的配置選項(xiàng)。啟用這個(gè)禁用緩存的選項(xiàng)后,修改模板文件,就能自動(dòng)實(shí)現(xiàn)模板的加載。如果使用spring -boot-devtools模塊,這些屬性將在開(kāi)發(fā)時(shí)自動(dòng)配置上。

下面是常用模板的禁用緩存的設(shè)置。

( 1 ) Thymeleaf

如果使用Thymeleaf,請(qǐng)?jiān)O(shè)置spring.thymeleaf.cache為false。

( 2 ) FreeMarker

如果使用FreeMarker,請(qǐng)?jiān)O(shè)置springfreemarker.cache為false。

(3) Groovy

如果使用Groovy,請(qǐng)?jiān)O(shè)置spring.groovy.cache為false。

應(yīng)用程序快速重啟

spring-boot-devtools模塊支持應(yīng)用程序自動(dòng)重新啟動(dòng)。雖然并不像商業(yè)軟件JRebel那樣快,但通常比“冷啟動(dòng)”快得多。所以,如果不想花費(fèi)太多資源在這些商業(yè)軟件身上,不妨嘗試下Devtools。

重新加載Java類(lèi)而不重新啟動(dòng)容器

現(xiàn)代IDE (如Eclipse、IDEA 等)都支持字節(jié)碼的熱插拔,所以如果進(jìn)行了不影響類(lèi)或方法簽名的更改,那么應(yīng)重新加載Java類(lèi),而不是重啟容器,這樣會(huì)更快、更干凈,而且不會(huì)因?yàn)橹貑⑷萜鞫a(chǎn)生副作用。


本文給大家介紹的內(nèi)容是以Hibernate為實(shí)現(xiàn)的JPA,如何來(lái)實(shí)現(xiàn)SpringBoot應(yīng)用的熱插拔

1.覺(jué)得文章不錯(cuò)的小伙伴,可以轉(zhuǎn)發(fā)關(guān)注小編一下;

2.下篇文章給大家介紹微服務(wù)測(cè)試這一塊兒的內(nèi)容;

3.感謝大家支持!!!!

推薦閱讀

如何在SpringBoot應(yīng)用中實(shí)現(xiàn)跨域訪問(wèn)資源和消息通信?

十年架構(gòu)師爆肝分享:基于SpringSecurity實(shí)現(xiàn)的基本認(rèn)證及OAuth2

5年資深架構(gòu)師重點(diǎn)聚焦:SpringBoot的配置詳解+內(nèi)嵌Servlet容器

總結(jié)

以上是生活随笔為你收集整理的jpa 不自动建表_如何来实现SpringBoot应用的JPA数据持久化和热插拔的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。