中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot怎么整合JPA框架

發布時間:2022-12-28 10:00:15 來源:億速云 閱讀:108 作者:iii 欄目:開發技術

這篇文章主要介紹了SpringBoot怎么整合JPA框架的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇SpringBoot怎么整合JPA框架文章都會有所收獲,下面我們一起來看看吧。

    一. Spring Boot數據訪問概述

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

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

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

    二. Spring Data JPA簡介

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

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

    2.1 編寫ORM實體類

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

    @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:標注要與數據庫做映射的實體類,默認情況下,數據表的名稱就是首字母小寫的類名。當然,還可以使用name屬性指定映射的表名。

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

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

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

    2.2 編寫Repository接口

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

    public interface DiscussRepository extends JpaRepository<Discuss, Integer> {
        // 1.查詢author非空的Discuss評論集合(JPA支持的方法名關鍵字查詢方式)
        List<Discuss> findByAuthorNotNull();
        // 2.根據文章id分頁查詢Discuss評論集合
        @Query("SELECT c FROM t_comment c WHERE c.articleId = ?1")
        List<Discuss> getDiscussPaged(Integer articleid, Pageable pageable);
        // 3.使用元素SQL語句,根據文章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.根據評論id修改評論作者author
        @Transactional // 表示支持事務管理
        @Modifying // 表示支持數據變更
        @Query("UPDATE t_comment c SET c.author = ?1 WHERE c.id = ?2")
        Integer updateDiscuss(String author, Integer id);
        // 5.根據評論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代表實體類主鍵數據類型。在上述示例中,選擇繼承了JpaRepository接口,JpaRepository的繼承結構如下圖所示。

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

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

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

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

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

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

    2.2.2 操作數據的多種方式

    在使用Spring Data JPA進行數據操作時,可以有多種實現方式,主要方式如下。

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

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

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

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

    2.2.3 @Transactional事務管理

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

    2.2.4 @Moditying注解

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

    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的版本號進行了統一管理。

    3.2 編寫ORM實體類

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

    3.3 編寫Repository接口

    在com.cy.repository包下創建一個用于對數據庫表t_comment進行操作的Repository接口DiscussRepository。

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

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

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

    3.5 整合測試

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

    關于“SpringBoot怎么整合JPA框架”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“SpringBoot怎么整合JPA框架”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    阿勒泰市| 大宁县| 东兴市| 东山县| 巴林右旗| 陵水| 苍南县| 康马县| 沈阳市| 红安县| 巴青县| 山西省| 启东市| 金寨县| 原阳县| 德州市| 尉氏县| 龙游县| 泰和县| 和龙市| 西平县| 大宁县| 永济市| 景洪市| 永川市| 鲁山县| 海原县| 金寨县| 化德县| 会理县| 塔河县| 鹤山市| 育儿| 玉山县| 陆河县| 黑河市| 深圳市| 和平区| 明水县| 连平县| 石嘴山市|