AI교육과정 - Spring.7

단비·2022년 12월 13일
0

AI교육과정

목록 보기
46/69
  • stream()
    • 다른 클래스에서 getter,setter를 가져올 수 있는 메소드
  • ctrl+shift+R
    • 모든 클래스 파일의 해당 문자열을 변경할 수 있음
  • @Component
    • 기본적으로 타입기반의 자동주입 어노테이션(Autowired 비슷한 기능)

  • 연관 관계 매핑
    • 테이블 간의 연관 관계가 있을 때 객체지향스럽게 사용하는 방법을 제공

    • 데이터베이스에서는 외래키를 사용하지만, JPA에서는 객체를 참조하는 방식으로 연관 관계를 매핑함

      @OneToOne: 하나의 엔티티가 하나의 엔티티와 연관 관계를 맺을 때 사용

      @OneToMany: 하나의 엔티티가 여러 개의 엔티티와 연관 관계를 맺을 때 사용

      @ManyToOne: 여러 개의 엔티티가 하나의 엔티티와 연관 관계를 맺을 때 사용

      @ManyToMany: 여러 개의 엔티티가 여러 개의 엔티티와 연관 관계를 맺을 때 사용

      @OneToMany(fetch = FetchType.LAZY, mappedBy = "category")
      private List<Partner> partners;
      
      @ManyToOne 
      private Category category;
    • @Test

      컬럼을 찾는데 오류가 발생할 경우 @ManyToOne 선언 부분에 @JoinColumn(name = "user_id")추가

      @Test
      @Transactional
      public void userOrderList(){
          Optional<Users> users = usersRepository.findByUserid("sweetPotato");
          users.ifPresent(
                  selectUser -> {
                      System.out.println(selectUser.getName() + "님의 주문 리스트");
                      System.out.println("====================================================");
                      System.out.println("*** 주문 내역 ***");
                      selectUser.getOrderGroups().stream().forEach(
                              orderGroup -> {
                                  System.out.println("수령인: " + orderGroup.getRevName());
                                  System.out.println("수령지: " + orderGroup.getRevAddress());
                                  System.out.println("총수량: " + orderGroup.getTotalQuantity());
                                  System.out.println("총금액: " + orderGroup.getTotalPrice());
                                  System.out.println("*** 상세 내역 ***");
                                  orderGroup.getOrderDetails().stream().forEach(
                                          orderDetail -> {
                                              System.out.println("상품명: " + orderDetail.getItem().getName());
                                              System.out.println("주문상태: " + orderDetail.getStatus());
                                              System.out.println("수량: " + orderDetail.getQuantity());
                                              System.out.println("가격: " + orderDetail.getTotalPrice());
                                              System.out.println("팜매처: " + orderDetail.getItem().getPartner().getName());
                                              System.out.println("고객센터 전화번호: " + orderDetail.getItem().getPartner().getCall_Center());
                                              System.out.println("카테고리명: " + orderDetail.getItem().getPartner().getCategory().getTitle());
                                          }
                                  );
                              }
                      );
                  }
          );
      }
  • FetchType OneToMany 에 fetch = FetchType.LAZY, mappedBy = "category" 문구가 필요함
    • LAZY(지연로딩)
      • 참조 객체들의 데이터들은 무시하고 해당 엔티티의 데이터만을 가져오는 방법
      • 참조 객체의 데이터를 사용하기 위해 여러 번의 쿼리를 사용
    • EAGER(즉시로딩)
      • 하나의 객체를 DB로부터 읽어올 때 참조 객체들의 데이터까지 전부 읽어오는 방법
      • 한 번의 쿼리로 모든 정보를 가져옴
profile
tistory로 이전! https://sweet-rain-kim.tistory.com/

0개의 댓글