Spring & Spring boot

[Spring Boot] JPA - 4. CRUD Example

jh4dev 2024. 8. 4. 13:32
<목차>

1. Environment
2. Sources
3. Test

 

Springboot - Basic JPA CRUD API Example

 

JPA를 바로 사용하기 보단, 동작 원리에 대해 알고 사용하는 것이 도움이 된다.

JPA 관련 포스팅

https://jh4dev.tistory.com/24

 

[Spring Boot] JPA - 1. ORM 과 JPA

1. ORM2. JPA & Hibernate [ORM]ORM은 Object Relational Mapping 의 줄임말로, 객체 관계 매핑을 의미한다.객체지향 언어에서 의미하는 객체와 RDB의 테이블을 자동으로 매핑하는 방법으로, 자바에서는 클래스와

jh4dev.tistory.com

 

https://jh4dev.tistory.com/25

 

[Spring Boot] JPA - 2. Entity

1. Entity 엔티티2. Entity Manager 엔티티 매니저3. Persistence Context 영속성 컨텍스트 [Entity]Entity(엔티티)는 ORM 의 핵심 개념으로, DB 테이블과 매핑되는 JAVA 클래스 이다.객체 지향적인 방식으로 DB를 다

jh4dev.tistory.com

https://jh4dev.tistory.com/27

 

[Spring Boot] JPA - 3. Entity & Repository

지난 포스팅에서 Entity / Entity Manager / Persistence Context 의 역할과 관계에 대해 알아보았다.이번 포스팅에서는 실제 Entity 클래스를 생성하는 방법과, Spring Data JPA 를 사용하기에, Entity Manager 를 사용

jh4dev.tistory.com

 

 

[Environment]

  • IDE : IntelliJ
  • Spring Boot
    • version 2.7.18
    • maven
  • JDK 11

 

 


[Sources]

  • DAO 계층을 활용한 샘플이다. 
    • DataAccessObject
    • 비즈니스 로직의 동작 과정에서 데이터를 조작하는 기능을 수행한다.
    • 다만, JPA에서 DAO의 개념은 Repository가 대체하고 있다.
    • JPA를 사용하는 규모가 작은 프로젝트에서는 별도의 DAO를 설계하지 않고, 서비스 레이어에서 DB에 접근하여 구현하기도 한다.
    • 아래 예시에서는, DAO 를 Service Layer 와 Respository 의 중간 계층을 구성하는 역할로 사용
  • 각 계층 간, 객체는 아래와 같이 주고 받도록 설계
  • 단, 위 내용과 마찬가지로, 정해진 방법은 없으며 상황에 따라 다르다.

 

https://github.com/jh4dev/spring-boot-study/tree/main/jpa

 

spring-boot-study/jpa at main · jh4dev/spring-boot-study

스프링 부트 스터디. Contribute to jh4dev/spring-boot-study development by creating an account on GitHub.

github.com

 

 

 


[Test]

Swagger with springdoc


등록 <POST>

  • 새로운 제품을 등록해보자.
    PK가 될 number 필드는, Entity에 자동 생성되도록 하였으므로 Request로 보내지 않는다.
  • Request
    • { "name": "테스트 제품1", "price": 10000, "stock": 20 }
  • Response
    • { "number": 1, "name": "테스트 제품1", "price": 10000, "stock": 20 }


 

조회 <GET>

  • 등록 API에서 생성된 number 필드를 인자로 호출
  • Request URL : localhost:8080/product?number=1


수정 <PUT>

  • 앞서 생성한 1번 제품의 제품명을 변경
  • Request
    • {"number": 1, "name": "제품명 변경"}
  • Response
    • { "number": 1, "name": "제품명 변경", "price": 10000, "stock": 20 }


삭제 <DELETE>

  • 생성되어있는 1번 제품을 삭제 처리