SpringBoot Server/API

JPA 예제 - (1)주문관리 API POST

ssury94 2025. 1. 6. 17:44

 

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와 비교해보기

 

DAO, DTO 알아보기 // 예제 - 유저관리 API POST

DAO (Data Access Object) 란?데이터베이스나 기타 영속성 메커니즘에 접근하는 객체 목적: 데이터 접근 로직과 비즈니스 로직을 분리기능: CRUD(Create, Read, Update, Delete) 작업 수행사용이유:   - 코

maeilcoding.tistory.com

 

 

// todo 1 creatOrder

1. API 명세서 확인

2. Postman에 API Request 작성

{
  "productName": "마우스",
  "quantity": 10,
  "totalPrice": 30000
}

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 createOrder(OrderRequest orderRequest) {
    // DTO 를 Entity 로 변환해야함
    Order order = new Order();
    // 사용하려면 메모리에 객체 생성
    order.productName = orderRequest.productName;
    order.quantity = orderRequest.quantity;
    order.totalPrice = orderRequest.totalPrice;
    orderRepository.save(order);
    //DB에 저장
    //응답 본문 없음 Void
}

 

1. 메서드 선언:   

public void createOrder(OrderRequest orderRequest)


   - `OrderRequest` 객체를 매개변수로 받아 주문을 생성합니다.
   - 반환 타입이 `void`이므로 별도의 응답을 반환하지 않습니다.

2. Entity 객체 생성:

Order order = new Order();


   - `Order` 엔티티의 새 인스턴스를 생성합니다.

3. DTO에서 Entity로 데이터 복사:

order.productName = orderRequest.productName;
order.quantity = orderRequest.quantity;
order.totalPrice = orderRequest.totalPrice;


   - `OrderRequest` DTO의 데이터를 `Order` 엔티티 객체에 복사합니다.

4. 데이터베이스에 저장:

orderRepository.save(order);


   - `JpaRepository`의 `save` 메서드를 사용하여 주문 엔티티를 데이터베이스에 저장합니다.

이 메서드는 클라이언트로부터 받은 주문 정보(DTO)를 엔티티로 변환하고, 이를 데이터베이스에 저장하는 과정을 수행합니다.

 

Controller 클래스에 메서드 완성

@PostMapping("/orders")
createOrder(@RequestBody OrderRequest orderRequest) {
    orderService.createOrder(orderRequest);
 
}