詳解SpringBoot中使用JPA作為數(shù)據(jù)持久化框架
JPA是Java Persistence API的簡稱,中文名Java持久層API,是JDK 5.0注解或XML描述對象-關(guān)系表的映射關(guān)系,并將運(yùn)行期的實(shí)體對象持久化到數(shù)據(jù)庫中。
平常項(xiàng)目開發(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: updateddl-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)用第一次運(yùn)行起來后才會。
- validate:每次加載 hibernate 時,驗(yàn)證創(chuàng)建數(shù)據(jù)庫表結(jié)構(gòu),只會和數(shù)據(jù)庫中的表進(jìn)行比較,不會創(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 的用法需要在實(shí)際的項(xiàng)目開發(fā)中去探索
到此這篇關(guān)于SpringBoot中使用JPA作為數(shù)據(jù)持久化框架的文章就介紹到這了,更多相關(guān)SpringBoot JPA數(shù)據(jù)持久化框架內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot3.X 無法解析parameter參數(shù)問題分析
本文介紹了Spring Boot 3.2.1版本中調(diào)用接口時出現(xiàn)的參數(shù)解析問題,該錯誤是由Spring新版本加強(qiáng)的錯誤校驗(yàn)和報錯提示導(dǎo)致的,在Spring 6.1之后,官方要求URL中的傳參必須使用`@PathVariable`聲明用于接收的變量,而不能省略`@RequestParam`注解,感興趣的朋友一起看看吧2025-03-03
IDEA2020.3.2版本自動注釋類和方法注釋模板配置步驟詳解
這篇文章主要介紹了IDEA2020.3.2版本自動注釋類和方法注釋模板配置步驟,本文給大家分享了我自己創(chuàng)建過程通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
Java實(shí)現(xiàn)定時任務(wù)的示例代碼
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)定時任務(wù)的相關(guān)知識,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-11-11
全面詳解java代碼重構(gòu)與設(shè)計(jì)模式
這篇文章主要為大家介紹了全面詳解java代碼重構(gòu)與設(shè)計(jì)模式的全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Java中多個線程交替循環(huán)執(zhí)行的實(shí)現(xiàn)
有些時候面試官經(jīng)常會問,兩個線程怎么交替執(zhí)行呀,本文就來詳細(xì)的介紹一下Java中多個線程交替循環(huán)執(zhí)行的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01
Springboot 整合 Java DL4J 打造文本摘要生成系統(tǒng)
本文介紹了如何使用SpringBoot整合JavaDeeplearning4j構(gòu)建文本摘要生成系統(tǒng),該系統(tǒng)能夠自動從長篇文本中提取關(guān)鍵信息,生成簡潔的摘要,幫助用戶快速了解文本的主要內(nèi)容,技術(shù)實(shí)現(xiàn)包括使用LSTM神經(jīng)網(wǎng)絡(luò)進(jìn)行模型構(gòu)建和訓(xùn)練,并通過SpringBoot集成RESTfulAPI接口2024-11-11
解決springboot configuration processor對maven子模塊不起作用的問題
這篇文章主要介紹了解決springboot configuration processor對maven子模塊不起作用的問題,本文通過圖文實(shí)例代碼給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09

