SpringBoot整合JPA的增删改查

Spring JPA 的核心思想是简化 Java 应用程序中的数据持久化操作。以下是一些关键点:

核心概念

 1.对象关系映射 (ORM)

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

2.实体

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

3.仓库接口

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

4.查询生成

        Spring Data JPA 可以根据方法名称自动生成 SQL 查询,简化了查询的书写。也支持使用 JPQL(Java Persistence Query Language)编写复杂查询。

5.事务管理

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

优点

  • 简化开发: 自动实现常见的数据访问操作,减少了样板代码的编写。

  • 降低复杂性: 减少了直接操作 SQL 的需要,允许开发者更专注于业务逻辑。

  • 集成: 与 Spring 框架其他部分(如事务管理、Spring Boot)无缝集成,提升开发效率。

配置和使用

  • 自动配置: 如果使用 Spring Boot,许多配置可以自动完成,只需提供基本的数据库连接信息。

  • 声明式查询: 使用方法命名规则,Spring Data JPA 可以自动生成查询,而不需要手动编写 SQL。

总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值