본문 바로가기
SpringBoot Server/API

JPA 예제 - (4)주문 삭제 API DELETE

by ssury94 2025. 1. 6.

JAP란?

 

SQL 대신 자바로 DB와 상호작용하기 JPA(Java Persistence API)

지금까지는 JDBC를 활용하여 DAO 클래스에서 SQL쿼리를 통해 DB 작업을 하였는데요.//sql을 통한 회원가입 처리@Repositorypublic class UserDAO { @Autowired JdbcTemplate jdbcTemplate; // todo 회원가입 public int signUp(User

maeilcoding.tistory.com

 

JDBC와 비교해보기

 

 

// todo 4 deleteOrder

1. API 명세서 확인

2. Postman에 API Request 작성

3. Entity 클래스 변수 선언

@Data
@NoArgsConstructor
@AllArgsConstructor

@Entity
@Table(name = "`order`")
public class Order {

    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
   public Long id;
    @Column(length = 200)
   public String productName;
    @Column
   public Integer quantity;
    @Column
   public Double totalPrice;
    @Column
   public Instant orderDate;

    @PrePersist
    public void prePersist(){
        orderDate = Instant.now();
    }
 
    // 데이터 insert 할때 자동으로 현재시간이 들어감.

}

`order`로 백틱을 사용한 이유

@Table(name = "`order`")에서 백틱()을 사용하는 이유는 데이터베이스에서 order라는 이름이 SQL 예약어로 사용되기 때문입니다. SQL에서 ORDER BY와 같은 구문에서 ORDER`는 특정한 의미를 가지므로, 이를 테이블 이름으로 사용할 경우 충돌이 발생할 수 있습니다. orders와 같이 복수형으로 테이블 이름을 설정하는 것이 좋습니다.

 

4. Repository extends

@Repository
public interface OrderRepository extends JpaRepository<Order,Long> {

}

 

JPA에서는 JpaRepository 인터페이스를 상속받는 Resporitory 클래스를 통해 DB와 상호작용 합니다.

상속받은 메서드를 통해 CRUD 작업이 가능합니다.

 

Service 클래스에 메서드 완성

// 오더 삭제
public void deleteOrder(long id) {
    // id가 존재 하는지 확인
    if (!orderRepository.existsById(id)) {
        throw new RuntimeException();
    } else {
        orderRepository.deleteById(id);
        // 리턴하는것 없이 DB에 삭제만 하면 됨 void
    }
}

 

아이디가 존재하는지 확인 후,

Repository 메서드 중 deleteById(id) 로 삭제 가능합니다.

Controller 클래스에 메서드 완성

 

@DeleteMapping("/orders/{id}")
public ResponseEntity<Object> deleteOrder(@PathVariable long id) {
    try {
        orderService.deleteOrder(id);
    } catch (Exception e) {
        return ResponseEntity.status(404).build();
    }
    return ResponseEntity.status(204).build();
}