欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot整合JPA框架實現(xiàn)過程講解

 更新時間:2022年12月21日 09:59:32   作者:一一哥Sun  
在開發(fā)中,我們通常會對數(shù)據(jù)庫的數(shù)據(jù)進行操作,Sprirng?Boot對關系型數(shù)據(jù)庫和非關系型數(shù)據(jù)庫的訪問操作都提供了非常好的整合支持

一. Spring Boot數(shù)據(jù)訪問概述

Spring Data是Spring提供的一個用于簡化數(shù)據(jù)庫訪問、支持云服務的開源框架。它是一個傘形項目,包含了大量關系型數(shù)據(jù)庫及非關系型數(shù)據(jù)庫的數(shù)據(jù)訪問解決方案,其設計目的是使我們可以快速且簡單地使用各種數(shù)據(jù)訪問技術。Spring Boot默認采用整合Spring Data的方式統(tǒng)一處理數(shù)據(jù)訪問層,通過添加大量自動配置,引入各種數(shù)據(jù)訪問模板xxxTemplate以及統(tǒng)一的Repository接口,從而達到簡化數(shù)據(jù)訪問層的操作。

Spring Data提供了多種類型數(shù)據(jù)庫支持,Spring Boot對Spring Data支持的數(shù)據(jù)庫進行了整合管理,提供了各種依賴啟動器。通過一張表羅列Spring Boot提供的常見數(shù)據(jù)庫依賴啟動器。

名稱描述
mybatis-spring-boot-starterMyBatis啟動器
mybatis-plus-boot-starterMyBatis-Plus啟動器
spring-boot-starter-data-jpaSpring Data JPA與Hibernate的啟動器
spring- boot starter-data-redisRedis鍵值數(shù)據(jù)存儲與Spring Data Redis和Jedis客戶端的啟動器
spring-boot-starter-data-neo4jNeo4j圖數(shù)據(jù)庫和Spring Data Neo4j的啟動器
spring-boot-starter-data-mongodbMongoDB和Spring Data MongoDB的啟動器

二. Spring Data JPA簡介

JPA(Java Persistence API,Java持久化API )是Sun公司官方提出的Java持久化規(guī)范,它為Java開發(fā)人員提供了一種對象/關系映射的工具管理Java中的關系型數(shù)據(jù),其主要目的是簡化現(xiàn)有的持久化開發(fā)工作和整合ORM(Object Relational Mapping,對象/關系映射)技術。Spring Data在JPA規(guī)范的基礎上,充分利用其優(yōu)點,提出了Spring Data JPA模塊對具有ORM關系數(shù)據(jù)進行持久化操作。

Spring Data JPA是Spring在ORM框架、JPA規(guī)范的基礎上封裝的一套JPA應用框架,提供了增刪改查等常用功能,使開發(fā)者可以用較少的代碼實現(xiàn)數(shù)據(jù)操作,同時還易于擴展。在介紹Spring Boot整合JPA之前,先針對Spring Data JPA的基本使用進行簡單介紹。

2.1 編寫ORM實體類

Spring Data JPA框架是針對具有ORM關系的數(shù)據(jù)進行操作,所以在使用Spring Data JPA時,首先需要編寫一個實體類與數(shù)據(jù)表進行映射,并且配置好映射關系。

@Entity(name = "t_comment")  // 設置ORM實體類,并指定映射的表名
public class Discuss {
    @Id   // 表明映射對應的主鍵id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 設置主鍵自增策略
    @Column(name = "article_id")  // 指定映射的表字段名
    private Integer articleId;
    // Generate: Getter and Setter、toString()
}

針對上述代碼,壹哥把用到的注解給大家進行簡要說明。

@Entity:標注要與數(shù)據(jù)庫做映射的實體類,默認情況下,數(shù)據(jù)表的名稱就是首字母小寫的類名。當然,還可以使用name屬性指定映射的表名。

@ld:標注在類屬性或者getter方法上,表示某一個屬性對應表中的主鍵。

@GeneratedValue:與@ld注解標注在同一位置,用于表示屬性對應主鍵的生成策略,可省略。Spring Data JPA支持的主鍵生成策略包括有TABLE(使用一個特定的數(shù)據(jù)庫表格來保存主鍵)、SEQUENCE(不支持主鍵自增長的數(shù)據(jù)庫主鍵生成策略)、IDENTITY(主鍵自增)和AUTO(JPA自主選擇前面3種合適的策略,是默認選項)。

@Column:標注在屬性上,當類屬性與表字段名不同時,能夠配合name屬性表示類屬性對應的表字段名。

2.2 編寫Repository接口

針對不同的表數(shù)據(jù)操作編寫各自對應的Repository接口,并根據(jù)需要編寫對應的數(shù)據(jù)操作方法。

public interface DiscussRepository extends JpaRepository<Discuss, Integer> {
    // 1.查詢author非空的Discuss評論集合(JPA支持的方法名關鍵字查詢方式)
    List<Discuss> findByAuthorNotNull();
    // 2.根據(jù)文章id分頁查詢Discuss評論集合
    @Query("SELECT c FROM t_comment c WHERE c.articleId = ?1")
    List<Discuss> getDiscussPaged(Integer articleid, Pageable pageable);
    // 3.使用元素SQL語句,根據(jù)文章id分頁查詢Discuss評論集合,nativeQuery為true表示用來編寫原生SQL語句 
    @Query(value = "SELECT * FROM t_comment WHERE article_Id = ?1", nativeQuery = true)
    List<Discuss> getDiscussPaged2(Integer articleid, Pageable pageable);
    //4.根據(jù)評論id修改評論作者author
    @Transactional // 表示支持事務管理
    @Modifying // 表示支持數(shù)據(jù)變更
    @Query("UPDATE t_comment c SET c.author = ?1 WHERE c.id = ?2")
    Integer updateDiscuss(String author, Integer id);
    // 5.根據(jù)評論id刪除評論
    @Transactional
    @Modifying
    @Query("DELETE t_comment c WHERE c.id = ?1")
    Integer deleteDiscuss(Integer id);
}

針對Repository接口編寫時的特殊要求,壹哥給大家解釋一下。

2.2.1 繼承XXRepository<T, ID>接口

我們在使用Spring Data JPA自定義Repository接口時,必須繼承XXRepository<T, ID>接口,其中的T代表要操作的實體類,ID代表實體類主鍵數(shù)據(jù)類型。在上述示例中,選擇繼承了JpaRepository接口,JpaRepository的繼承結構如下圖所示。

下面對JpaRepository接口繼承結構中涉及的接口進行說明,具體如下。

(1) Repository是Spring Data JPA提供的用于自定義Repository接口的頂級父接口,該接口中沒有聲明任何方法。

(2) CrudRepository接口是Repository的繼承接口之一,包含了一些基本的CRUD方法。

(3) PagingAndSortingRepository接口繼承CrudRepository接口的同時,提供了分頁和排序兩個方法。

(4) QueryByExampleExecutor接口是進行條件封裝查詢的頂級父接口,允許通過Example實例執(zhí)行復雜條件查詢。

JpaRepository接口同時繼承了PagingAndSortingRepository接口和QueryByExampleExecutor接口,并額外提供了一些數(shù)據(jù)操作方法。自定義Repository接口文件時,通常會直接選擇繼承JpaRepository接口。

2.2.2 操作數(shù)據(jù)的多種方式

在使用Spring Data JPA進行數(shù)據(jù)操作時,可以有多種實現(xiàn)方式,主要方式如下。

(1).如果自定義接口繼承了JpaRepository接口,則默認包含了一些常用的CRUD方法。

(2).自定義Repository接口中,可以使用@Query注解配合SQL語句進行數(shù)據(jù)的查、改、刪操作。

(3).自定義Repository接口中,可以直接使用方法名關鍵字進行查詢操作。

其中,Spring Data JPA中支持的方法名關鍵字及對應的SQL片段說明,如下表所示。

2.2.3 @Transactional事務管理

在自定義的Repository接口中,針對數(shù)據(jù)的變更操作(修改、刪除),無論是否使用了@Query注解,都必須在方法上方添加@Transactional注解進行事務管理,否則程序執(zhí)行就會出現(xiàn)InvalidDataAccessApiUsageException異常。如果在調用Repository接口方法的業(yè)務層Service類上已經添加了@Transactional注解進行事務管理,那么Repository接口文件中就可以省略@Transactional注解。

2.2.4 @Moditying注解

在自定義的Repository接口中,使用@Query注解方式執(zhí)行數(shù)據(jù)變更操作(修改、刪除),除了要使用@Query注解,還必須添加@Moditying注解表示數(shù)據(jù)變更。

2.3.5 復雜條件查詢

JPA還支持使用Example實例進行復雜條件查詢。例如,針對JpaRepository接口中已存在的findAll(Example<S> var1)方法進行查詢。

三. 使用Spring Boot整合JPA

使用Spring Boot整合JPA,具體步驟如下。

3.1 添加Spring Data JPA依賴啟動器

在項目的pom.xml文件中添加Spring Data JPA依賴啟動器。

注意:

我們并沒有編寫Spring Data JPA對應的版本號,這是因為Spring Boot對Spring Data JPA的版本號進行了統(tǒng)一管理。

3.2 編寫ORM實體類

為了方便操作,以之前創(chuàng)建的數(shù)據(jù)庫表t_comment為例編寫對應的實體類,將之前創(chuàng)建的Comment類復制一份并重命名為Discuss,同時添加JPA對應的注解進行映射配置。

3.3 編寫Repository接口

在com.cy.repository包下創(chuàng)建一個用于對數(shù)據(jù)庫表t_comment進行操作的Repository接口DiscussRepository。

3.4 編寫單元測試進行接口方法測試

將Chapter03ApplcationTests測試類在當前位置復制一份并重命名為JpaTests,用來編寫JPA相關的單元測試,并對內容稍微修改后編寫DiscussRepository接口對應的測試方法。

測試方法中分別使用了JpaRepository默認方法、方法名關鍵字、@Query注解和Example封裝參數(shù)的形式進行了數(shù)據(jù)操作。

3.5 整合測試

選擇JpaTests測試類中單元測試方法進行效果的演示。

以上就是SpringBoot中整合JPA框架的過程,你學會了嗎?如果還有其他疑問,可以在評論區(qū)留言哦。

到此這篇關于SpringBoot整合JPA框架實現(xiàn)過程講解的文章就介紹到這了,更多相關SpringBoot整合JPA內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • mybatis-plus中BaseMapper入門使用

    mybatis-plus中BaseMapper入門使用

    本文主要介紹了mybatis-plus中BaseMapper入門使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java并發(fā)編程深入理解之Synchronized的使用及底層原理詳解 上

    Java并發(fā)編程深入理解之Synchronized的使用及底層原理詳解 上

    在并發(fā)編程中存在線程安全問題,主要原因有:1.存在共享數(shù)據(jù) 2.多線程共同操作共享數(shù)據(jù)。關鍵字synchronized可以保證在同一時刻,只有一個線程可以執(zhí)行某個方法或某個代碼塊,同時synchronized可以保證一個線程的變化可見(可見性),即可以代替volatile
    2021-09-09
  • Java裝飾器設計模式_動力節(jié)點Java學院整理

    Java裝飾器設計模式_動力節(jié)點Java學院整理

    這篇文章主要介紹了Java裝飾器設計模式的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-05-05
  • Maven中exec插件執(zhí)行Java程序的實現(xiàn)

    Maven中exec插件執(zhí)行Java程序的實現(xiàn)

    在Maven項目中,可以使用Maven的插件來執(zhí)行Java程序,本文主要介紹了Maven中exec插件執(zhí)行Java程序的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Java中的自旋鎖解析

    Java中的自旋鎖解析

    這篇文章主要介紹了Java中的自旋鎖解析,自旋鎖是指當一個線程嘗試獲取某個鎖時,如果該鎖已被其他線程占用,就一直循環(huán)檢測鎖是否被釋放,而不是進入線程掛起或睡眠狀態(tài),需要的朋友可以參考下
    2023-10-10
  • mybatis使用foreach查詢不出結果也不報錯的問題

    mybatis使用foreach查詢不出結果也不報錯的問題

    這篇文章主要介紹了mybatis使用foreach查詢不出結果也不報錯的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java selenium截圖操作的實現(xiàn)

    Java selenium截圖操作的實現(xiàn)

    這篇文章主要介紹了Java selenium截圖操作的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • java判斷integer是否為空的詳細過程

    java判斷integer是否為空的詳細過程

    在java編寫過程中,我們會使用到各種各樣的表達式,在使用表達式的過程中,有哪些安全問題需要我們注意的呢?對java判斷integer是否為空相關知識感興趣的朋友一起來看看吧
    2023-02-02
  • 淺談springMVC接收前端json數(shù)據(jù)的總結

    淺談springMVC接收前端json數(shù)據(jù)的總結

    下面小編就為大家分享一篇淺談springMVC接收前端json數(shù)據(jù)的總結,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Java實現(xiàn)連接kubernates集群的兩種方式詳解

    Java實現(xiàn)連接kubernates集群的兩種方式詳解

    這篇文章主要為大家詳細介紹了Java實現(xiàn)連接kubernates集群的兩種方式,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01

最新評論