티스토리 뷰

반응형

JPA 연관관계 설정 방법

 
👉 JPA 의 경우는 Enitity 클래스의 필드 위에 연관관계 어노테이션 (@) 을 설정해 주는 것만으로 연관관계가 형성됩니다!


 

  • 음식 배달 서버를 개발한다고 가정

JPA 코드 구현

 

중요) 항상 Enitity 본인 중심으로 관계를 생각!

  • 주문 (Order) 코드
@Enitity
public class Order {
    @OneToMany
    private List<Food> foods;

    @OneToOne
    private Coupon coupon;
}
  • 음식점주 (Owner)
@Entity
public class Owner {
    @ManyToOne
    Restaurant restaurant;
}
  • 고객 (User)
@Entity
public class User {
    @ManyToMany
    List<Restaurant> likeRestaurants;
}

 

 

Spring Data JPA 이해

  • Spring Data JPA 는?
    • JPA 를 편리하게 사용하기 위해, 스프링에서 JPA 를 Wrapping
    • 스프링 개발자들이 JPA 를 사용할 때 필수적으로 생성해야 하나, 예상 가능하고 반복적인 코드들 → Spring Data JPA 가 대신 작성
    • Repostiory 인터페이스만 작성하면, 필요한 구현은 스프링이 대신 알아서 척척!

Spring Data JPA 예제

  • 상품 Enitity 선언
@Entity
public class Product extends Timestamped {
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    private Long id;
    private Long userId;
    private String title;
    private String image;
    private String link;
    private int lprice;
    private int myprice;
}
  • Spring Data JPA) 상품 Repository 생성
public interface ProductRepository extends JpaRepository<Product, Long> {
}
  • Spring Data JPA) 기본 제공해 주는 기능
    // 1. 상품 생성
    Product product = new Product(...);
        productRepository.save(product);

// 2. 상품 전체 조회
        List<Product> products = productRepository.findAll();

// 3. 상품 전체 개수 조회
        long count = productRepository.count();

// 4. 상품 삭제
        productRepository.delete(product);
  • ID 외의 필드에 대한 추가 기능은 interface 만 선언해 주면, 구현은 Spring Data JPA 가 대신!!
public interface ProductRepository extends JpaRepository<Product, Long> {
    // (1) 회원 ID 로 등록된 상품들 조회
    List<Product> findAllByUserId(Long userId);

    // (2) 상품명이 title 인 관심상품 1개 조회
    Product findByTitle(String title);

    // (3) 상품명에 word 가 포함된 모든 상품들 조회
    List<Product> findAllByTitleContaining(String word);

    // (4) 최저가가 fromPrice ~ toPrice 인 모든 상품들을 조회
    List<Product> findAllByLpriceBetween(int fromPrice, int toPrice);
}

 

Spring Data JPA 추가기능 구현방법은 공식문서(링크)에 명시되어 있음

 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods

 

반응형

'개발일지 > TIL' 카테고리의 다른 글

TreeSet이란?  (0) 2022.07.20
HashSet 이란?  (0) 2022.07.20
DB의 연관관계 이해  (0) 2022.07.18
JPA 영속성 컨텍스트 이해  (0) 2022.07.18
JPA 이해  (0) 2022.07.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함