最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot中使用Spring-data-jpa的配置方法詳解

 更新時間:2019年03月11日 11:27:11   作者:小飛俠-2  
今天小編就為大家分享一篇關(guān)于Spring Boot中使用Spring-data-jpa的配置方法詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

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

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

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

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);
}

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

使用示例

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

工程配置

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

<dependency 
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

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

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的配置屬性,其主要作用是:自動創(chuàng)建、更新、驗證數(shù)據(jù)庫表結(jié)構(gòu)。該參數(shù)的幾種配置如下:

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

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

創(chuàng)建實體

創(chuàng)建一個User實體,包含id(主鍵)、name(姓名)、age(年齡)屬性,通過ORM框架其會被映射到數(shù)據(jù)庫表中,由于配置了hibernate.hbm2ddl.auto,在應(yīng)用啟動的時候框架會自動去數(shù)據(jù)庫中創(chuàng)建對應(yīng)的表。

@Entity
public class User {
  @Id
  @GeneratedValue
  private Long id;
  @Column(nullable = false)
  private String name;
  @Column(nullable = false)
  private Integer age;
  // 省略構(gòu)造函數(shù)
  // 省略getter和setter
}

創(chuàng)建數(shù)據(jù)訪問接口

下面針對User實體創(chuàng)建對應(yīng)的Repository接口實現(xiàn)對該實體的數(shù)據(jù)訪問,如下代碼:

public interface UserRepository extends JpaRepository<User, Long> {
  User findByName(String name);
  User findByNameAndAge(String name, Integer age);
  @Query("from User u where u.name=:name")
  User findUser(@Param("name") String name);
}

在Spring-data-jpa中,只需要編寫類似上面這樣的接口就可實現(xiàn)數(shù)據(jù)訪問。不再像我們以往編寫了接口時候還需要自己編寫接口實現(xiàn)類,直接減少了我們的文件清單。

下面對上面的UserRepository做一些解釋,該接口繼承自JpaRepository,通過查看JpaRepository接口的API文檔,可以看到該接口本身已經(jīng)實現(xiàn)了創(chuàng)建(save)、更新(save)、刪除(delete)、查詢(findAll、findOne)等基本操作的函數(shù),因此對于這些基礎(chǔ)操作的數(shù)據(jù)訪問就不需要開發(fā)者再自己定義。

在我們實際開發(fā)中,JpaRepository接口定義的接口往往還不夠或者性能不夠優(yōu)化,我們需要進(jìn)一步實現(xiàn)更復(fù)雜一些的查詢或操作。由于本文重點在spring boot中整合spring-data-jpa,在這里先拋磚引玉簡單介紹一下spring-data-jpa中讓我們興奮的功能,后續(xù)再單獨開篇講一下spring-data-jpa中的常見使用。

在上例中,我們可以看到下面兩個函數(shù):

  • User findByName(String name)
  • User findByNameAndAge(String name, Integer age)

它們分別實現(xiàn)了按name查詢User實體和按name和age查詢User實體,可以看到我們這里沒有任何類SQL語句就完成了兩個條件查詢方法。這就是Spring-data-jpa的一大特性:通過解析方法名創(chuàng)建查詢。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • Spring依賴注入底層原理詳解

    Spring依賴注入底層原理詳解

    這篇文章主要介紹了Spring依賴注入底層原理詳解,??依賴注入是一種設(shè)計模式,它將對象之間的依賴關(guān)系從代碼中移除,并由容器來管理這些依賴關(guān)系,依賴注入的主要目的是降低代碼的耦合度,使代碼更加靈活和可維護(hù),需要的朋友可以參考下
    2023-09-09
  • Tomcat集群和Session復(fù)制應(yīng)用介紹

    Tomcat集群和Session復(fù)制應(yīng)用介紹

    本文將詳細(xì)介紹Tomcat集群和Session復(fù)制應(yīng)用,需要了解的朋友可以參考下
    2012-11-11
  • SpringMVC @RequestBody Date類型的Json轉(zhuǎn)換方式

    SpringMVC @RequestBody Date類型的Json轉(zhuǎn)換方式

    這篇文章主要介紹了SpringMVC @RequestBody Date類型的Json轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • xxl-job的部署及springboot集成使用示例詳解

    xxl-job的部署及springboot集成使用示例詳解

    XXL-Job是一個分布式任務(wù)調(diào)度平臺,可進(jìn)行任務(wù)調(diào)度、管理和監(jiān)控,并提供任務(wù)分片、失敗重試、動態(tài)分配等功能,這篇文章主要介紹了xxl-job的部署及springboot集成使用,需要的朋友可以參考下
    2023-06-06
  • 使用sharding-jdbc實現(xiàn)水平分庫+水平分表的示例代碼

    使用sharding-jdbc實現(xiàn)水平分庫+水平分表的示例代碼

    本文主要介紹了使用sharding-jdbc實現(xiàn)水平分庫+水平分表,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • IDEA整合jeesite4.x及安裝教程

    IDEA整合jeesite4.x及安裝教程

    本文給大家介紹IDEA整合jeesite4.x及安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • java自定義ClassLoader加載指定的class文件操作

    java自定義ClassLoader加載指定的class文件操作

    這篇文章主要介紹了java自定義ClassLoader加載指定的class文件操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java中的ThreadLocal功能演示示例

    Java中的ThreadLocal功能演示示例

    這篇文章主要介紹了Java中的ThreadLocal功能演示示例,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-02-02
  • maven的pom文件與打包詳解

    maven的pom文件與打包詳解

    pom文件定于了一個maven項目的maven配置,一般pom文件的放在項目或者模塊的根目錄下。本文詳細(xì)的介紹了pom文件配置,感興趣的可以了解一下
    2021-08-08
  • java反射方式創(chuàng)建代碼詳解

    java反射方式創(chuàng)建代碼詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于java反射方式創(chuàng)建代碼詳解內(nèi)容,對此有興趣的朋友們可以學(xué)習(xí)下。
    2021-01-01

最新評論

兴海县| 盐池县| 宣恩县| 全椒县| 武城县| 剑川县| 呼玛县| 玉环县| 东源县| 彰化县| 木兰县| 阿尔山市| 兴文县| 兴文县| 屯门区| 海林市| 滁州市| 古丈县| 信丰县| 木兰县| 汕尾市| 武安市| 昂仁县| 桃江县| 甘泉县| 元江| 新泰市| 专栏| 武夷山市| 保亭| 拜城县| 岐山县| 墨脱县| 苍山县| 汝阳县| 大港区| 鸡泽县| 嘉善县| 中阳县| 开平市| 德江县|