1. 什么是JPA
? ?JPA(Java Persistence API, Java 持久化API)是SUN公司提出的Java持久化規(guī)范,它提供了一種對象/關(guān)系映射的管理工具來管理Java中的關(guān)系型數(shù)據(jù)庫。JPA的主要目的是簡化現(xiàn)有的持久化開發(fā)工作并且整合ORM框架,JPA本身并不是ORM框架,它是一種規(guī)范,這種規(guī)范可以私下通過注解或者XML描述“對象-關(guān)系表”之間的映射關(guān)系,并將實體對象持久化到數(shù)據(jù)庫中,從而極大地簡化現(xiàn)有的持久化開發(fā)工作。
1.1 JPA和MyBatis的關(guān)系
? ? 實現(xiàn)JPA的框架有Hibernate, TopLink, 而我們前面介紹的MyBatis不屬于實現(xiàn)JPA的框架,主要區(qū)別有:
Mybatis是對象和結(jié)果集的映射,而JPA規(guī)范強(qiáng)調(diào)的是對象和關(guān)系表之間的映射。
遵守JPA規(guī)范的框架具有良好的移植性,不用關(guān)心用什么數(shù)據(jù)庫,而Mybatis框架在更改數(shù)據(jù)庫時需要修改底層SQL。
2. Spring Data JPA
2.1 配置SpringData JPA
? ? Spring Data 是Spring 的一個子項目, 旨在統(tǒng)一和簡化對各類型持久化存儲, 而不拘泥于是關(guān)系型數(shù)據(jù)庫還是NoSQL 數(shù)據(jù)存儲。
? ?Spring Data JPA是Spring Data項目的一部分,它是在ORM框架思想、JPA規(guī)范的基礎(chǔ)上封裝的一套JPA應(yīng)用框架。使用Spring Data JPA只需要繼承和擴(kuò)展Spring Data 中統(tǒng)一的數(shù)據(jù)訪問接口Repository接口無需編寫SQL實現(xiàn)數(shù)據(jù)庫訪問。
在pom.xml文件中添加spring-boot-starter-data-jpa依賴
<dependency>
? ? <groupId>org.springframework.boot</groupId>
? ? <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
在數(shù)據(jù)庫中新建一個schema用于JPA測試
?然后在application.properties文件中進(jìn)行相關(guān)配置
spring.datasource.url=jdbc:mysql://localhost:3306/jpa_demo?useSSL=true&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=itJMF-4RObQ2
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
?
#JPA 配置
spring.jpa.hibernate.ddl-auto=update
#spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
?這里對JPA配置進(jìn)行簡單說明
?spring.jpa.hibernate.ddl-auto
該配置比較常用,配置實體類維護(hù)數(shù)據(jù)庫表結(jié)構(gòu)的具體行為。它主要有4個選項
create: 啟動時刪數(shù)據(jù)庫中的表,然后創(chuàng)建新表,退出時不刪除數(shù)據(jù)表
create-drop: 啟動時刪數(shù)據(jù)庫中的表,然后創(chuàng)建,退出時刪除數(shù)據(jù)表 如果表不存在則報錯
update: 如果啟動時表格式不一致則更新表,原有數(shù)據(jù)保留
validate: 項目啟動表結(jié)構(gòu)進(jìn)行校驗 如果不一致則報錯”
這里我們選擇了update
spring.jpa.show-sql=true 操作時在控制臺打印真實的SQL語句,便于調(diào)試
spring.jpa.properties.hibernate.format_sql=true 以JSON格式打印輸出SQL語句方便查看
3. 驗證Spring Data JPA
首先,創(chuàng)建Scenic實體類,它是一個實體類,按照J(rèn)PA的設(shè)計思想,這個實體類也是定義數(shù)據(jù)庫中的表結(jié)構(gòu)的類,示例代碼如下
@Entity
@Table(name = "scenics")
public class Scenic {
? ? @GeneratedValue(strategy = GenerationType.IDENTITY)
? ? @Id
? ? private int scenicId;
?
? ? private int cityId;
?
? ? //@Column(name = "scenicName")
? ? @Column(length = 64)
?
? ? private String scenicName;
?
? ? private int price;
?
?
? ? public Scenic() {
?
? ? }
?
? ? public Scenic(Integer cityId, String scenicName, int price ){
? ? ? ? this.cityId = cityId;
? ? ? ? this.scenicName = scenicName;
? ? ? ? this.price = price;
? ? }
?
?
?注意這個實體類中使用了JPA相關(guān)的注解
@Entity 這個注解是使用JPA時必須的注解,代表這個類對應(yīng)了一個數(shù)據(jù)庫表
@Table 這是一個可選的注解,用于說明數(shù)據(jù)庫實體對應(yīng)的表信息,包括表的名稱、索引信息等,如果沒有則表名和實體類的名稱一致,一般情況下我們不使用該注解,這里為了演示,我們使用該注解將表名申明為Scenics
@Id 代表對應(yīng)的主鍵
@GeneratedValue 設(shè)置數(shù)據(jù)庫主鍵自動生成規(guī)則。strategy屬性提供4種選項
AUTO:主鍵由程序控制,是默認(rèn)選項。
IDENTITY:主鍵由數(shù)據(jù)庫自動生成,即采用數(shù)據(jù)庫ID自增長的方式,注意Oracle不支持這種方式。
SEQUENCE:通過數(shù)據(jù)庫的序列產(chǎn)生主鍵,通過@SequenceGenerator注解指定序列名,注意MySQL不支持這種方式。
TABLE:通過特定的數(shù)據(jù)庫表產(chǎn)生主鍵,使用該策略可以使應(yīng)用更易于數(shù)據(jù)庫移植。
@Column注解:聲明實體屬性的表字段的定義。默認(rèn)的實體每個屬性都對應(yīng)表的一個字段,字段名默認(rèn)與屬性名保持一致。字段的類型根據(jù)實體屬性類型自動對應(yīng)。這里主要聲明了字符字段的長度length,如果不聲明,則系統(tǒng)會采用255作為該字段的長度。
這里需要注意JPA自動建表的字段命名規(guī)則采用的是下劃線,如屬性scenicName會將生成數(shù)據(jù)庫字段scenic_name,如果需要生成非下劃線字段,可以采用@Column(name = "ScenicName")
運(yùn)行測試
運(yùn)行Spring boot應(yīng)用,控制臺輸出
? 查看數(shù)據(jù)庫,可以看到已經(jīng)自動創(chuàng)建了scenics數(shù)據(jù)庫表
? ?
?4. JpaRepository類定義
? 接下來學(xué)習(xí)如何通過類來操作數(shù)據(jù)庫,在Spring Data JPA中使用JpaRepository接口類完成對數(shù)據(jù)庫的操作。JpaRepository是Spring Data JPA中最重要的類之一。
?這是JpaRepository接口的定義
@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T>
?可以看出JpaRepository繼承了接口PagingAndSortingRepository和QueryByExampleExecutor。而PagingAndSortingRepository又繼承CrudRepository。
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
?所以JpaRepository接口同時擁有了基本CRUD功能以及分頁功能。
?JpaRepository提供了30多個默認(rèn)方法,基本能滿足項目中的數(shù)據(jù)庫操作功能。當(dāng)我們需要定義自己的Repository接口的時候,我們可以直接繼承JpaRepository,從而獲得SpringBoot Data JPA為我們內(nèi)置的多種基本數(shù)據(jù)操作方法。
5. JpaRepository基礎(chǔ)方法
下面對主要的方法進(jìn)行測試
在項目目錄下新建repository包,添加接口文件ScenicRepository
?代碼如下?
@Repository
public interface ScenicRepository extends JpaRepository<Scenic, Integer> {
}
?
?在測試用例類Chapter9ApplicationTests中添加測試方法進(jìn)行測試
————————————————
原文鏈接:https://blog.csdn.net/qwdzq/article/details/126809651文章來源:http://www.zghlxwxcb.cn/news/detail-493401.html
輕松搞定SpringBoot JPA使用配置過程詳解_java_腳本之家文章來源地址http://www.zghlxwxcb.cn/news/detail-493401.html
到了這里,關(guān)于Spring Boot整合JPA 與 JpaRepository 基礎(chǔ)方法介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!