日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

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

生活随笔

當(dāng)前位置: 首頁(yè) >

使用Spring-data-jpa(1)(三十)

發(fā)布時(shí)間:2025/7/25 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Spring-data-jpa(1)(三十) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在實(shí)際開(kāi)發(fā)過(guò)程中,對(duì)數(shù)據(jù)庫(kù)的操作無(wú)非就“增刪改查”。就最為普遍的單表操作而言,除了表和字段不同外,語(yǔ)句都是類(lèi)似的,開(kāi)發(fā)人員需要寫(xiě)大量類(lèi)似而枯燥的語(yǔ)句來(lái)完成業(yè)務(wù)邏輯。

為了解決這些大量枯燥的數(shù)據(jù)操作語(yǔ)句,我們第一個(gè)想到的是使用ORM框架,比如:Hibernate。通過(guò)整合Hibernate之后,我們以操作Java實(shí)體的方式最終將數(shù)據(jù)改變映射到數(shù)據(jù)庫(kù)表中。

為了解決抽象各個(gè)Java實(shí)體基本的“增刪改查”操作,我們通常會(huì)以泛型的方式封裝一個(gè)模板Dao來(lái)進(jìn)行抽象簡(jiǎn)化,但是這樣依然不是很方便,我們需要針對(duì)每個(gè)實(shí)體編寫(xiě)一個(gè)繼承自泛型模板Dao的接口,再編寫(xiě)該接口的實(shí)現(xiàn)。雖然一些基礎(chǔ)的數(shù)據(jù)訪問(wèn)已經(jīng)可以得到很好的復(fù)用,但是在代碼結(jié)構(gòu)上針對(duì)每個(gè)實(shí)體都會(huì)有一堆Dao的接口和實(shí)現(xiàn)。

由于模板Dao的實(shí)現(xiàn),使得這些具體實(shí)體的Dao層已經(jīng)變的非常“薄”,有一些具體實(shí)體的Dao實(shí)現(xiàn)可能完全就是對(duì)模板Dao的簡(jiǎn)單代理,并且往往這樣的實(shí)現(xiàn)類(lèi)可能會(huì)出現(xiàn)在很多實(shí)體上。Spring-data-jpa的出現(xiàn)正可以讓這樣一個(gè)已經(jīng)很“薄”的數(shù)據(jù)訪問(wèn)層變成只是一層接口的編寫(xiě)方式。比如,下面的例子:

1 2 3 4 5 6 7 8 public?interface?UserRepository?extends?JpaRepository<User, Long> { ????User findByName(String name); ????@Query("from User u where u.name=:name") ????User findUser(@Param("name") String name); }

我們只需要通過(guò)編寫(xiě)一個(gè)繼承自JpaRepository的接口就能完成數(shù)據(jù)訪問(wèn),下面以一個(gè)具體實(shí)例來(lái)體驗(yàn)Spring-data-jpa給我們帶來(lái)的強(qiáng)大功能。

使用示例

由于Spring-data-jpa依賴(lài)于Hibernate。如果您對(duì)Hibernate有一定了解,下面內(nèi)容可以毫不費(fèi)力的看懂并上手使用Spring-data-jpa。如果您還是Hibernate新手,您可以先按如下方式入門(mén),再建議回頭學(xué)習(xí)一下Hibernate以幫助這部分的理解和進(jìn)一步使用。

工程配置

在pom.xml中添加相關(guān)依賴(lài),加入以下內(nèi)容:

1 2 3 4 <dependency ????<groupId>org.springframework.boot</groupId> ????<artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>

在application.xml中配置:數(shù)據(jù)庫(kù)連接信息(如使用嵌入式數(shù)據(jù)庫(kù)則不需要)、自動(dòng)創(chuàng)建表結(jié)構(gòu)的設(shè)置,例如使用mysql的情況如下:

1 2 3 4 5 6 spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop

spring.jpa.properties.hibernate.hbm2ddl.auto是hibernate的配置屬性,其主要作用是:自動(dòng)創(chuàng)建、更新、驗(yàn)證數(shù)據(jù)庫(kù)表結(jié)構(gòu)。該參數(shù)的幾種配置如下:

  • create:每次加載hibernate時(shí)都會(huì)刪除上一次的生成的表,然后根據(jù)你的model類(lèi)再重新來(lái)生成新表,哪怕兩次沒(méi)有任何改變也要這樣執(zhí)行,這就是導(dǎo)致數(shù)據(jù)庫(kù)表數(shù)據(jù)丟失的一個(gè)重要原因。
  • create-drop:每次加載hibernate時(shí)根據(jù)model類(lèi)生成表,但是sessionFactory一關(guān)閉,表就自動(dòng)刪除。
  • update:最常用的屬性,第一次加載hibernate時(shí)根據(jù)model類(lèi)會(huì)自動(dòng)建立起表的結(jié)構(gòu)(前提是先建立好數(shù)據(jù)庫(kù)),以后加載hibernate時(shí)根據(jù)model類(lèi)自動(dòng)更新表結(jié)構(gòu),即使表結(jié)構(gòu)改變了但表中的行仍然存在不會(huì)刪除以前的行。要注意的是當(dāng)部署到服務(wù)器后,表結(jié)構(gòu)是不會(huì)被馬上建立起來(lái)的,是要等應(yīng)用第一次運(yùn)行起來(lái)后才會(huì)。
  • validate:每次加載hibernate時(shí),驗(yàn)證創(chuàng)建數(shù)據(jù)庫(kù)表結(jié)構(gòu),只會(huì)和數(shù)據(jù)庫(kù)中的表進(jìn)行比較,不會(huì)創(chuàng)建新表,但是會(huì)插入新值。

至此已經(jīng)完成基礎(chǔ)配置,如果您有在Spring下整合使用過(guò)它的話,相信你已經(jīng)感受到Spring Boot的便利之處:JPA的傳統(tǒng)配置在persistence.xml文件中,但是這里我們不需要。當(dāng)然,最好在構(gòu)建項(xiàng)目時(shí)候按照之前提過(guò)的最佳實(shí)踐的工程結(jié)構(gòu)來(lái)組織,這樣以確保各種配置都能被框架掃描到。

轉(zhuǎn)載于:https://www.cnblogs.com/MaxElephant/p/10232324.html

總結(jié)

以上是生活随笔為你收集整理的使用Spring-data-jpa(1)(三十)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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