SpringBoot整合JPA的增刪改查教程
Spring JPA 的核心思想是簡化 Java 應(yīng)用程序中的數(shù)據(jù)持久化操作。
以下是一些關(guān)鍵點(diǎn):
核心概念
1.對象關(guān)系映射 (ORM)
Spring JPA 使用 ORM 技術(shù),將 Java 對象和數(shù)據(jù)庫表映射起來,使得開發(fā)人員可以操作對象而不必直接處理數(shù)據(jù)庫表。
2.實(shí)體
實(shí)體代表數(shù)據(jù)庫中的一條記錄,每個(gè)實(shí)體類映射到數(shù)據(jù)庫中的一張表。
3.倉庫接口
提供了一組用于操作數(shù)據(jù)庫的接口。
開發(fā)者通過繼承這些接口,可以執(zhí)行常見的數(shù)據(jù)操作,如創(chuàng)建、讀取、更新和刪除,而無需編寫具體的 SQL 語句。
4.查詢生成
Spring Data JPA 可以根據(jù)方法名稱自動(dòng)生成 SQL 查詢,簡化了查詢的書寫。
也支持使用 JPQL(Java Persistence Query Language)編寫復(fù)雜查詢。
5.事務(wù)管理
支持聲明式事務(wù)管理,確保在執(zhí)行數(shù)據(jù)庫操作時(shí)的一致性和完整性。
優(yōu)點(diǎn)
- 簡化開發(fā):自動(dòng)實(shí)現(xiàn)常見的數(shù)據(jù)訪問操作,減少了樣板代碼的編寫。
- 降低復(fù)雜性:減少了直接操作 SQL 的需要,允許開發(fā)者更專注于業(yè)務(wù)邏輯。
- 集成 與 Spring 框架其他部分(如事務(wù)管理、Spring Boot)無縫集成,提升開發(fā)效率。
配置和使用
- 自動(dòng)配置:如果使用 Spring Boot,許多配置可以自動(dòng)完成,只需提供基本的數(shù)據(jù)庫連接信息。
- 聲明式查詢:使用方法命名規(guī)則,Spring Data JPA 可以自動(dòng)生成查詢,而不需要手動(dòng)編寫 SQL。
總結(jié):
Spring JPA 通過簡化數(shù)據(jù)庫操作和集成事務(wù)管理,使得開發(fā)人員可以更輕松地實(shí)現(xiàn)數(shù)據(jù)持久化層。它將復(fù)雜的數(shù)據(jù)庫操作封裝起來,使開發(fā)者可以專注于應(yīng)用程序的業(yè)務(wù)邏輯。
Spring Boot項(xiàng)目依賴
<!-- JPA是針對數(shù)據(jù)庫的操作,需要引入對應(yīng)的數(shù)據(jù)庫 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>配置數(shù)據(jù)源
spring:
jpa:
open-in-view: false
# 控制是否打印運(yùn)行時(shí)的SQL語句與參數(shù)信息
show-sql: true創(chuàng)建實(shí)體類
@Entity
@Table(name = "sys_brand")
@Data
public class SysBrandRes {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long brandId;
/**
* 品牌編碼
*/
private String brandCode;
/**
* 品牌名稱
*/
private String brandName;
/**
* 顯示順序
*/
private Integer brandSort;
}創(chuàng)建Controller類
/**
* 添加
* @param sysBrandRes
* @return
*/
@PostMapping
public ResponseEntity<SysBrandRes> brandAdd(@RequestBody SysBrandRes sysBrandRes){
SysBrandRes sysBrand=sysBrandService.add(sysBrandRes);
return new ResponseEntity<>(sysBrand, HttpStatus.CREATED);
}
/**
* 根據(jù)品牌名查詢和分頁查詢
* @param brandName
* @param page
* @param size
* @return
*/
@GetMapping("/pageBrands")
public Page<SysBrandRes> brandList(@RequestParam String brandName,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10")int size
){
return sysBrandService.searchBrands(brandName,page,size);
}
/**
* 刪除
* @param brandId
* @return
*/
@DeleteMapping("/{brandId}")
public ResponseEntity<SysBrandRes> brandDel(@PathVariable Long brandId){
sysBrandService.del(brandId);
return new ResponseEntity<>( HttpStatus.NO_CONTENT);
}
/**
* 修改
* @param brandId
* @param sysBrandRes
* @return
*/
@PutMapping("/{brandId}")
public ResponseEntity<SysBrandRes> upd(@PathVariable Long brandId,@RequestBody SysBrandRes sysBrandRes){
SysBrandRes brandRes=sysBrandService.upd(brandId,sysBrandRes);
if(brandRes!= null){
return new ResponseEntity<>(brandRes,HttpStatus.OK);
}
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}創(chuàng)建Service類
接口
Page<SysBrandRes> searchBrands(String brandName, int page, int size); SysBrandRes add(SysBrandRes sysBrandRes); void del( Long brandId); SysBrandRes upd(Long brandId, SysBrandRes sysBrandRes);
實(shí)現(xiàn)類
@param brandName
* @param page
* @param size
* @return
*/
@Override
public Page<SysBrandRes> searchBrands(String brandName, int page, int size) {
PageRequest pageRequest = PageRequest.of(page, size);
return brandRespository.findByBrandNameContaining(brandName,pageRequest);
}
/**
* 添加
* @param sysBrandRes
* @return
*/
@Override
public SysBrandRes add(SysBrandRes sysBrandRes) {
return brandRespository.save(sysBrandRes);
}
/**
* 刪除
* @param brandId
*/
@Override
public void del(Long brandId) {
brandRespository.deleteById(brandId);
}
/**
* 修改
* @param brandId
* @param sysBrandRes
* @return
*/
@Override
public SysBrandRes upd(Long brandId, SysBrandRes sysBrandRes) {
// 檢查指定的品牌 ID 是否存在于數(shù)據(jù)倉庫中
if(brandRespository.existsById(brandId)) {
// 如果品牌存在,設(shè)置傳入的品牌對象的 ID 為指定的品牌 ID
sysBrandRes.setBrandId(brandId);
// 將更新后的品牌對象保存到數(shù)據(jù)倉庫,并返回保存后的對象
return brandRespository.save(sysBrandRes);
}
// 如果品牌不存在,返回 null
return null;
}創(chuàng)建Repository接口
@Repository
public interface BrandRespository extends JpaRepository<SysBrandRes,Long> {
Page<SysBrandRes> findByBrandNameContaining(String brandName, Pageable pageable);
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 基于SpringBoot+JPackage構(gòu)建獨(dú)立安裝包的操作流程
- Springboot應(yīng)用中@EntityScan和@EnableJpaRepositories的使用詳解
- SpringBoot集成JPA全指南
- Springboot+JPA打印SQL日志過程
- Springboot?JPA級聯(lián)操作的實(shí)現(xiàn)(一對一、一對多、多對多)
- SpringBoot實(shí)現(xiàn)JPA多數(shù)據(jù)源配置小結(jié)
- springboot jpa實(shí)現(xiàn)優(yōu)雅處理isDelete的默認(rèn)值
- SpringBoot整合JPA 基礎(chǔ)使用示例教程
相關(guān)文章
Java Config下的Spring Test幾種方式實(shí)例詳解
這篇文章主要介紹了Java Config下的Spring Test方式實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05
Spring Boot中使用jdbctemplate 操作MYSQL數(shù)據(jù)庫實(shí)例
本篇文章主要介紹了Spring Boot中使用jdbctemplate 操作MYSQL數(shù)據(jù)庫實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-04-04
SpringBoot項(xiàng)目如何修改Tomcat版本號
本文介紹了Spring Boot項(xiàng)目默認(rèn)使用內(nèi)嵌Tomcat Servlet容器打包部署,通過添加指定版本的Tomcat GA依賴,可以修改默認(rèn)版本號,對于jar包和war包形式的部署,無需排除內(nèi)置Tomcat,此經(jīng)驗(yàn)為個(gè)人見解,僅供參考2026-04-04
mybatis@insert?注解如何判斷insert或是update
這篇文章主要介紹了mybatis@insert?注解如何判斷insert或是update,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
Java中static與final關(guān)鍵字詳解(簡單易懂)
在Java中static和final是兩個(gè)非常重要的關(guān)鍵字,它們各自具有獨(dú)特的作用,當(dāng)組合使用時(shí),還可以產(chǎn)生額外的效果,這篇文章主要介紹了Java中static與final關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下2026-01-01
Java Volatile應(yīng)用單例模式實(shí)現(xiàn)過程解析
這篇文章主要介紹了Java Volatile應(yīng)用單例模式實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
Java swing實(shí)現(xiàn)音樂播放器桌面歌詞字體變色效果
這篇文章主要為大家詳細(xì)介紹了Java swing實(shí)現(xiàn)音樂播放器桌面歌詞字體變色效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
SpringCloud如何實(shí)現(xiàn)Zuul集群(負(fù)載均衡)
這篇文章主要介紹了SpringCloud如何實(shí)現(xiàn)Zuul集群(負(fù)載均衡)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Tomcat啟動(dòng)分析(我們?yōu)槭裁匆渲肅ATALINA_HOME環(huán)境變量)
本文主要介紹Tomcat啟動(dòng)分析的知識,這里整理了相關(guān)資料及分析原因和如何實(shí)現(xiàn)的方法,有興趣的小伙伴可以參考下2016-09-09

