最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合JPA的增刪改查教程

 更新時(shí)間:2026年03月01日 11:04:05   作者:安樂OvO.  
SpringJPA通過對象關(guān)系映射、倉庫接口、查詢生成和事務(wù)管理,簡化了Java應(yīng)用程序中的數(shù)據(jù)持久化操作,它自動實(shí)現(xiàn)數(shù)據(jù)訪問,減少樣板代碼,降低復(fù)雜性,并與Spring框架無縫集成

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ù)方法名稱自動生成 SQL 查詢,簡化了查詢的書寫。

也支持使用 JPQL(Java Persistence Query Language)編寫復(fù)雜查詢。

5.事務(wù)管理

支持聲明式事務(wù)管理,確保在執(zhí)行數(shù)據(jù)庫操作時(shí)的一致性和完整性。

優(yōu)點(diǎn)

  • 簡化開發(fā):自動實(shí)現(xiàn)常見的數(shù)據(jù)訪問操作,減少了樣板代碼的編寫。
  • 降低復(fù)雜性:減少了直接操作 SQL 的需要,允許開發(fā)者更專注于業(yè)務(wù)邏輯。
  • 集成 與 Spring 框架其他部分(如事務(wù)管理、Spring Boot)無縫集成,提升開發(fā)效率。

配置和使用

  • 自動配置:如果使用 Spring Boot,許多配置可以自動完成,只需提供基本的數(shù)據(jù)庫連接信息。
  • 聲明式查詢:使用方法命名規(guī)則,Spring Data JPA 可以自動生成查詢,而不需要手動編寫 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è)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

许昌县| 平阴县| 民乐县| 江北区| 金平| 沧州市| 彰武县| 沁水县| 运城市| 陵水| 敦煌市| 独山县| 获嘉县| 福安市| 奉贤区| 交城县| 沧源| 北碚区| 永定县| 元江| 北海市| 涡阳县| 冀州市| 镇雄县| 丰宁| 余干县| 浑源县| 玉林市| 翼城县| 秦安县| 友谊县| 桂东县| 神池县| 垦利县| 博兴县| 玛曲县| 深圳市| 吉隆县| 方正县| 南昌市| 忻城县|