java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot整合JPA的增删改查

SpringBoot整合JPA的增删改查教程

作者:安乐OvO.

SpringJPA通过对象关系映射、仓库接口、查询生成和事务管理,简化了Java应用程序中的数据持久化操作,它自动实现数据访问,减少样板代码,降低复杂性,并与Spring框架无缝集成

Spring JPA 的核心思想是简化 Java 应用程序中的数据持久化操作。

以下是一些关键点:

核心概念

1.对象关系映射 (ORM)

Spring JPA 使用 ORM 技术,将 Java 对象和数据库表映射起来,使得开发人员可以操作对象而不必直接处理数据库表。

2.实体

实体代表数据库中的一条记录,每个实体类映射到数据库中的一张表。

3.仓库接口

提供了一组用于操作数据库的接口。

开发者通过继承这些接口,可以执行常见的数据操作,如创建、读取、更新和删除,而无需编写具体的 SQL 语句。

4.查询生成

Spring Data JPA 可以根据方法名称自动生成 SQL 查询,简化了查询的书写。

也支持使用 JPQL(Java Persistence Query Language)编写复杂查询。

5.事务管理

支持声明式事务管理,确保在执行数据库操作时的一致性和完整性。

优点

配置和使用

总结:

Spring JPA 通过简化数据库操作和集成事务管理,使得开发人员可以更轻松地实现数据持久化层。它将复杂的数据库操作封装起来,使开发者可以专注于应用程序的业务逻辑。

Spring Boot项目依赖

<!-- JPA是针对数据库的操作,需要引入对应的数据库 -->

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <version>2.2.5.RELEASE</version>
</dependency>

配置数据源

spring:
  jpa:
    open-in-view: false
    # 控制是否打印运行时的SQL语句与参数信息
    show-sql: true

创建实体类

@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;
}

创建Controller类

/**
 * 添加
 * @param sysBrandRes
 * @return
 */
@PostMapping
public ResponseEntity<SysBrandRes> brandAdd(@RequestBody SysBrandRes sysBrandRes){
    SysBrandRes sysBrand=sysBrandService.add(sysBrandRes);
    return new ResponseEntity<>(sysBrand, HttpStatus.CREATED);
}

/**
 * 根据品牌名查询和分页查询
 * @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);
}

创建Service类

接口

Page<SysBrandRes> searchBrands(String brandName, int page, int size);

SysBrandRes add(SysBrandRes sysBrandRes);

void del( Long brandId);

SysBrandRes upd(Long brandId, SysBrandRes sysBrandRes);

实现类

 @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 是否存在于数据仓库中
    if(brandRespository.existsById(brandId)) {
        // 如果品牌存在,设置传入的品牌对象的 ID 为指定的品牌 ID
        sysBrandRes.setBrandId(brandId);
        // 将更新后的品牌对象保存到数据仓库,并返回保存后的对象
        return brandRespository.save(sysBrandRes);
    }
    // 如果品牌不存在,返回 null
    return null;
}

创建Repository接口

@Repository
public interface BrandRespository extends JpaRepository<SysBrandRes,Long> {

    Page<SysBrandRes> findByBrandNameContaining(String brandName, Pageable pageable);
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文