詳解SpringBoot中使用JPA作為數(shù)據(jù)持久化框架
JPA是Java Persistence API的簡稱,中文名Java持久層API,是JDK 5.0注解或XML描述對象-關(guān)系表的映射關(guān)系,并將運行期的實體對象持久化到數(shù)據(jù)庫中。
平常項目開發(fā)中用的較多的是 MyBatis 和 MyBatis-Plus,Jpa 使用較少,本篇就對在 SpringBoot 中使用 JPA 作為數(shù)據(jù)持久化框架做如下說明:
1、引入依賴
<!-- spring mvc --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- mysql 驅(qū)動 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!-- jpa持久層 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
2、數(shù)據(jù)庫連接配置
server: port: 8080 spring: datasource: url: jdbc:mysql://127.0.0.1:3306/jpa-demo?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=true&characterEncoding=UTF-8 driver-class-name: com.mysql.cj.jdbc.Driver username: root password: 123456 jpa: hibernate: # 自動創(chuàng)建表 ddl-auto: update
ddl-auto 一共有五個可選值
- none: 什么也不做
- create:每次加載 hibernate 時都會刪除上一次的生成的表,然后根據(jù)你的 model 類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執(zhí)行,這就是導(dǎo)致數(shù)據(jù)庫表數(shù)據(jù)丟失的一個重要原因。
- create-drop:每次加載 hibernate 時根據(jù) model 類生成表,但是 sessionFactory 一關(guān)閉,表就自動刪除。
- update:最常用的屬性,第一次加載 hibernate 時根據(jù) model 類會自動建立起表的結(jié)構(gòu)(前提是先建立好數(shù)據(jù)庫),以后加載 hibernate 時根據(jù) model 類自動更新表結(jié)構(gòu),即使表結(jié)構(gòu)改變了但表中的行仍然存在不會刪除以前的行。要注意的是當(dāng)部署到服務(wù)器后,表結(jié)構(gòu)是不會被馬上建立起來的,是要等應(yīng)用第一次運行起來后才會。
- validate:每次加載 hibernate 時,驗證創(chuàng)建數(shù)據(jù)庫表結(jié)構(gòu),只會和數(shù)據(jù)庫中的表進行比較,不會創(chuàng)建新表,但是會插入新值。
3、數(shù)據(jù)對象(DO)
import lombok.Data; import javax.persistence.*; @Table(name = "sys_user") @Entity @Data public class SysUserDO { /** * 主鍵-自增 */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(columnDefinition = "varchar(12) comment '用戶名稱'") private String name; @Column(columnDefinition = "varchar(50) comment '郵箱'") private String email; }
- @Id,表示該屬性為主鍵字段
- @GeneratedValue(strategy = GenerationType.IDENTITY),使用主鍵自增的方式
- @Column,指定數(shù)據(jù)庫字段的屬性,可以設(shè)置數(shù)據(jù)類型,長度、注釋等信息,也可以只寫一個注解,jpa會自動識別
4、持久化對象
import com.biz.jpa.entity.SysUserDO; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface SysUserRepository extends JpaRepository<SysUserDO, Long> { }
@Repository,表示這是數(shù)據(jù)訪問層
5、業(yè)務(wù)層
import com.biz.jpa.dao.SysUserRepository; import com.biz.jpa.entity.SysUserDO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class SysUserService { @Autowired private SysUserRepository sysUserRepository; public SysUserDO saveUser() { SysUserDO sysUser = new SysUserDO(); sysUser.setName("Asurplus"); sysUser.setEmail("123456@qq.com"); sysUserRepository.save(sysUser); return sysUser; } }
我們向 sys_user 表中插入一條數(shù)據(jù),由于主鍵自增,我們無需設(shè)置主鍵,插入成功后,自增的主鍵會自動回寫到對象中
6、測試
import com.biz.jpa.entity.SysUserDO; import com.biz.jpa.service.SysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class SysUserController { @Autowired private SysUserService sysUserService; @GetMapping("save") public SysUserDO save() { return sysUserService.saveUser(); } }
訪問:
http://localhost:8080/save
返回:
{"id":1,"name":"Asurplus","email":"123456@qq.com"}
插入成功,并返回了自增的主鍵
Jpa 的集成到這里就完成了,更多 Jpa 的用法需要在實際的項目開發(fā)中去探索
到此這篇關(guān)于SpringBoot中使用JPA作為數(shù)據(jù)持久化框架的文章就介紹到這了,更多相關(guān)SpringBoot JPA數(shù)據(jù)持久化框架內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java常問面試內(nèi)容--數(shù)組、聲明、初始化、冒泡、多維數(shù)組、稀疏數(shù)組
這篇文章主要介紹了Java多線程面試題(面試官常問),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-07-07Java使用JSONPath解析JSON完整內(nèi)容詳解
這篇文章主要介紹了Java使用JSONPath解析JSON完整內(nèi)容詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03java利用easyexcel實現(xiàn)導(dǎo)入與導(dǎo)出功能
這篇文章主要介紹了java利用easyexcel實現(xiàn)導(dǎo)入與導(dǎo)出功能,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助2022-09-09基于Java的度分秒坐標轉(zhuǎn)純經(jīng)緯度坐標的漂亮國基地信息管理的方法
本文以java語言為例,詳細介紹如何管理漂亮國的基地信息,為下一步全球的空間可視化打下堅實的基礎(chǔ),首先介紹如何對數(shù)據(jù)進行去重處理,然后介紹在java當(dāng)中如何進行度分秒位置的轉(zhuǎn)換,最后結(jié)合實現(xiàn)原型進行詳細的說明,感興趣的朋友跟隨小編一起看看吧2024-06-06淺談Java虛擬機對內(nèi)部鎖的四種優(yōu)化方式
這篇文章主要介紹了淺談Java虛擬機對內(nèi)部鎖的四種優(yōu)化方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10