有天上飛的概念,就要有落地的實現 概念十遍不如代碼一遍,朋友,希望你把文中所有的代碼案例都敲一遍 先贊後看,養成習慣 SpringBoot 圖文教程系列文章目錄 1. "SpringBoot圖文教程1「概念+案例 思維導圖」「基礎篇上」" 2. "SpringBoot圖文教程2—日誌的使用「logb ...
有天上飛的概念,就要有落地的實現
概念十遍不如代碼一遍,朋友,希望你把文中所有的代碼案例都敲一遍
先贊後看,養成習慣
SpringBoot 圖文教程系列文章目錄
- SpringBoot圖文教程1「概念+案例 思維導圖」「基礎篇上」
- SpringBoot圖文教程2—日誌的使用「logback」「log4j」
- SpringBoot圖文教程3—「‘初戀’情結」集成Jsp
- SpringBoot圖文教程4—SpringBoot 實現文件上傳下載
- SpringBoot圖文教程5—SpringBoot 中使用Aop
- SpringBoot圖文教程6—SpringBoot中過濾器的使用
- SpringBoot圖文教程7—SpringBoot攔截器的使用姿勢這都有
- SpringBoot圖文教程8 — SpringBoot集成MBG「代碼生成器」
- SpringBoot圖文教程9—SpringBoot 導入導出 Excel 「Apache Poi」
- SpringBoot圖文教程10—模板導出|百萬數據Excel導出|圖片導出「easypoi」
- SpringBoot圖文教程11—從此不寫mapper文件「SpringBoot集成MybatisPlus」
前言
在之前的文章中介紹過了Mybatis,MBG 和 MybatisPlus 等一系列Mybatis相關的技術,有朋友在評論區提到了Jpa,也評論了SpringData Jpa 和 Mybatis 的優劣。但是方便也好,強大也好,每個技術都有自己的使用場景,所以我不在文中討論好壞,今天帶來Jpa的使用教程,各個技術大家根據需要任選。
什麼是 SpringData Jpa
SpringData 簡介
SpringData是SpringBoot官方預設使用的訪問資料庫的技術,簡化了對各種資料庫的訪問操作,包括但不僅限於Mysql,Redis,MongoDB等。
官網地址:https://spring.io/projects/spring-data
通過官網可以看到 SpringData 能夠操作的技術非常的多,除了Mysql,Redis,MongoDB,還有es,hadoop等等
那麼SpringData是如何簡化訪問操作的呢?
在SpringData中,提供了一套統一的介面來實現對數據訪問層的操作,就是Repository介面。在介面中提供了基本的CRUD,查詢,排序和分頁的相關操作。
SpringData 主要 API:
- Repository<T,ID extends Serializable>:統一介面
- RevisionRepository<T,ID extends Serializable, N extends Number & Comparable
>:基於樂觀鎖機制 - CrudRepository<T,ID extends Serializable>:基本CRUD操作
- PagingAndSortingRepository<T, ID extends Serializable>:基本CRUD以及分頁
簡單說就是只要導入SpringData的依賴,不需要任何方法 就可以直接進行基本的數據操作,因為這些方法在介面中寫好了。
但是,慢著!!!好像哪裡不對
有了介面是一回事兒,如果沒有實現還是不能夠進行使用啊,那麼SpringData 的實現哪裡找呢?
想要實現方法就要找今天的主角了 SpringData Jpa。
SpringData Jpa
如圖所示,對於我們的Java程式而言想要訪問資料庫只需要調用SpringData的統一API方法就可以,而至於調用方法之後怎麼完成任務,則不需要我們擔心,SpringData 針對不同的技術有很多的實現,例如:SpringData Redis,SpringData Jpa,SpringData MongoDB等,而SpringData Jpa 就是對關係型資料庫的實現。
jpa全稱Java Persistence Api,是一套Java EE 平臺標準的ORM規範,通過Jpa可以實現對關係型資料庫的訪問。在Jpa 中有 JpaRepository 介面,編寫介面繼承JpaRepository既有crud及分頁等基本功能。
Jpa和Hibernate的關係,如圖所示,Jpa可以整合很多技術,Hibernate,Toplink,OpenJpa,而SpringData Jpa的預設實現就是Hibernate。
簡單來說就是:SpringData Jpa 實現了 SpringData,Hibernate 又實現了 SpringData Jpa。所以最終幹活的實際上是 Hibernate。
SpringBoot中Jpa的基本使用
基本使用步驟:
- 創建項目 導入依賴
- 編寫實體類 添加Jpa註解配置映射關係
- 編寫一個Dao介面來操作實體類對應的數據表(Repository)
- 配置Jpa
- 測試類測試
1.創建項目 導入依賴 配置數據源
創建項目導入如下依賴:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lby</groupId>
<artifactId>boot-jpa</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>boot-jpa</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- jpa-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
<!-- 測試-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置
註意:和Mybatis不同的是,在配置的資料庫boot中可以先不建表,後續使用Jpa操作資料庫的時候,如果發現沒有表,Jpa會根據實體類幫你創建一張資料庫表。
2.編寫實體類 添加Jpa註解配置映射關係
通過Jpa操作資料庫的數據,需要將實體類和資料庫建立聯繫
package com.lby.bootjpa.entity;
import lombok.Data;
import javax.persistence.*;
/**
* @Data lombok 註解 生成get set 等
*
* 註解的作用:配置實體類和資料庫表的映射關係
* @Entity 告訴JPA這是一個實體類(一個和數據表映射的類)
* @Table 配置當前實體類和哪張表對應;可以省略不寫,如果省略預設表名就是admin
*/
@Data
@Entity
@Table(name = "admin")
public class Admin {
/**
* @Id 代表這是主鍵
* @GeneratedValue 主鍵生成規則 IDENTITY 自增
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer adminId;
/**
* 配置屬性和資料庫表欄位的對應
* name 資料庫表的欄位名 可以不寫 不寫就是欄位名就是屬性名
*/
@Column(name = "username")
private String username;
@Column
private String password;
}
3.編寫一個Dao介面來操作實體類對應的數據表(Repository)
/**
* JpaRepository 泛型1 被操作的實體類 泛型2 主鍵屬性的類型
*/
public interface AdminRepository extends JpaRepository<Admin,Integer> {
}
4.配置Jpa
spring:
jpa:
hibernate:
# 更新或者創建數據表結構 之前提到過,如果資料庫中沒做表,Jpa會我們創建 這個配置
# 就是在沒有表的時候創建,實體類發生改變的話 會更新表結構
ddl-auto: update
# 配置在日誌中列印出執行的 SQL 語句信息
show-sql: true
5.測試類測試
基本的配置結束,我們通過測試類簡單測試一下能不能使用
package com.lby.bootjpa;
import com.lby.bootjpa.entity.Admin;
import com.lby.bootjpa.repository.AdminRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {BootJpaApplication.class})
public class BootJpaApplicationTests {
@Autowired
private AdminRepository adminRepository;
@Test
public void contextLoads() {
Admin admin = new Admin();
admin.setUsername("hhh");
admin.setPassword("12345");
adminRepository.save(admin);
}
}
測試類的運行結果如下
總結
Tips:本文主要講解 SpringBoot項目中整合 SpringData Jpa的方式,關於SpringData Jpa的使用比較基礎,如果想要瞭解更加全面的SpringData Jpa的使用,請持續關註,後續會寫Jpa全面的使用教程。
恭喜你完成了本章的學習,為你鼓掌!如果本文對你有幫助,請幫忙點贊,評論,轉發,這對作者很重要,謝謝。
讓我們再次回顧本文的學習目標
- 掌握SpringBoot中 SpringData Jpa 的使用
要掌握SpringBoot更多的用法,請持續關註本系列教程。
求關註,求點贊,求轉發
歡迎關註本人公眾號:鹿老師的Java筆記,將在長期更新Java技術圖文教程和視頻教程,Java學習經驗,Java面試經驗以及Java實戰開發經驗。