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