有天上飛的概念,就要有落地的實現java
概念十遍不如代碼一遍,朋友,但願你把文中全部的代碼案例都敲一遍mysql
先贊後看,養成習慣面試
SpringBoot 圖文教程系列文章目錄spring
在以前的文章中介紹過了Mybatis,MBG 和 MybatisPlus 等一系列Mybatis相關的技術,有朋友在評論區提到了Jpa,也評論了SpringData Jpa 和 Mybatis 的優劣。可是方便也好,強大也好,每一個技術都有本身的使用場景,因此我不在文中討論好壞,今天帶來Jpa的使用教程,各個技術你們根據須要任選。sql
SpringData是SpringBoot官方默認使用的訪問數據庫的技術,簡化了對各類數據庫的訪問操做,包括但不只限於Mysql,Redis,MongoDB等。數據庫
官網地址:https://spring.io/projects/spring-data
經過官網能夠看到 SpringData 可以操做的技術很是的多,除了Mysql,Redis,MongoDB,還有es,hadoop等等
apache
在SpringData中,提供了一套統一的接口來實現對數據訪問層的操做,就是Repository接口。在接口中提供了基本的CRUD,查詢,排序和分頁的相關操做。springboot
SpringData 主要 API:app
- 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的依賴,不須要任何方法 就能夠直接進行基本的數據操做,由於這些方法在接口中寫好了。maven
可是,慢着!!!好像哪裏不對
有了接口是一回事兒,若是沒有實現仍是不可以進行使用啊,那麼SpringData 的實現哪裏找呢?
想要實現方法就要找今天的主角了 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。
基本使用步驟:
- 建立項目 導入依賴
- 編寫實體類 添加Jpa註解配置映射關係
- 編寫一個Dao接口來操做實體類對應的數據表(Repository)
- 配置Jpa
- 測試類測試
建立項目導入以下依賴:
<?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會根據實體類幫你建立一張數據庫表。
經過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; }
/** * JpaRepository 泛型1 被操做的實體類 泛型2 主鍵屬性的類型 */ public interface AdminRepository extends JpaRepository<Admin,Integer> { }
spring: jpa: hibernate: # 更新或者建立數據表結構 以前提到過,若是數據庫中沒作表,Jpa會咱們建立 這個配置 # 就是在沒有表的時候建立,實體類發生改變的話 會更新表結構 ddl-auto: update # 配置在日誌中打印出執行的 SQL 語句信息 show-sql: true
基本的配置結束,咱們經過測試類簡單測試一下能不能使用
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實戰開發經驗。