【持久層框架】- SpringData - JPA

SpringData - JPA

生命不息,寫作不止 繼續踏上學習之路,學之分享筆記 總有一天我也能像各位大佬一樣 一個有夢有戲的人 @怒放吧德德分享學習心得,歡迎指正,大家一起學習成長!

【持久層框架】- SpringData - JPA

文章插圖
JPA簡介JPA 即Java Persistence API 。是一款持久層框架,中文名Java持久層API,是JDK 5.0注解或XML描述對象-關系表的映射關系,并將運行期的實體對象持久化到數據庫中 。JPA的對象關系映射(ORM)模型是基于Hibernate 。是一款面向對象的ORM框架,JPA不需要關心數據庫字段,通過注解將數據庫表與實體完成映射,在java中的操作只需要對實體進行操作即可 。
什么是ORM?ORM(Object-Relational Mapping) 表示對象關系映射 。在面向對象的軟件開發中,通過ORM,就可以把對象映射到關系型數據庫中 。只要有一套程序能夠做到建立對象與數據庫的關聯,操作對象就可以直接操作數據庫數據,就可以說這套程序實現了ORM對象關系映射 。也就是說ORM是建立了一個實體與數據庫表的關系,使得開發者對實體的直接操作而不是對數據庫的操作,但操作實體也就等同于操作了數據庫 。ORM框架還有:MyBatis、Hibernate
SpringData-JPASpring Data JPA 是 Spring 基于 ORM 框架、JPA 規范的基礎上封裝的一套JPA應用框架,可使開發者用極簡的代碼即可實現對數據庫的訪問和操作 。它提供了包括增刪改查等在內的常用功能,且易于擴展!學習并使用 Spring Data JPA 可以極大提高開發效率!Spring Data JPA 讓我們解脫了DAO層的操作,基本上所有CRUD都可以依賴于它來實現在實際的工作工程中,推薦使用Spring Data JPA + ORM(如:hibernate)完成操作,這樣在切換不同的ORM框架時提供了極大的方便,同時也使數據庫層操作更加簡單,方便解耦 。
SpringBoot整合JPA接下來通過一個案例簡單學習一下JPA,并且在案例中學習一些相關知識 。
導入依賴需要導入jpa坐標和mysql依賴包
<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></dependencies>編寫配置文件先配置數據源 , 采用mysql8.0 。還包括配置jpa的相關配置 。主要是配置jpa的sql日志打印和自動創建表格 。
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/springboot_demo?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghaiusername: rootpassword: 12356jpa:show-sql: truehibernate:ddl-auto: create # 自動創建表格,之后改成updatejpa的底層是通過hibernate執行的 , 通過配置ddl-auto能夠自動創建表,但是這個不建議使用 , 如果是create , 在項目運行的時候就會把存在的表刪除在添加 。詳情如下:ddl-auto屬性用于設置自動表定義,可以實現自動在數據庫中為我們創建一個表,表的結構會根據我們定義的實體類決定,它有4種
  • create 啟動時刪數據庫中的表 , 然后創建,退出時不刪除數據表
  • create-drop 啟動時刪數據庫中的表 , 然后創建,退出時刪除數據表 如果表不存在報錯
  • update 如果啟動時表格式不一致則更新表,原有數據保留
  • validate 項目啟動表結構進行校驗 如果不一致則報錯
接下來就可以開始體驗jpa了
創建實體類【【持久層框架】- SpringData - JPA】可見通過注解可以實現實體與數據庫的直接映射,jpa操作的就是這些實體就等同操作數據庫的表結構 。
package com.jpa.demo.domain;import lombok.Data;import javax.annotation.Generated;import javax.persistence.*;import java.io.Serializable;/** * @author: lyd * @description: 實體User * @Date: 2022/10/2 */@Data@Entity@Table(name = "sys_user")public class User implements Serializable {@Id@Column(name = "user_id")@GeneratedValue(strategy = GenerationType.IDENTITY) // 自增private Long id;private String username;private String nickName;private String password;}