2022.12.28.WED

ronglong·2022년 12월 28일
0

코드스테이츠 Day50

  1. 오전 데일리 코딩
  • 어려운 문제 건너 뛰고, 풀만해 보이는 36번 문제를 풀었다.
    전에 풀어봤던 버블 정렬 기법으로 풀었고, 답은 맞았지만, insertionSort은 이미 정렬한 부분은 비교하지 않는 최적화 과정을 통해서 문제를 풀어내는 것이 가장 좋다고 레퍼런스에 나와있다.
public class Solution { 
  public int[] insertionSort(int[] arr) {
		// TODO: 다음 요소보다 크면 순서 바꾸고, 다시 배열 첫 번째부터 돌기 (이중 포문 사용)
    int num = 0;

    for(int j=0; j<arr.length; j++){
      for(int i=0; i<arr.length-1; i++){
        if(arr[i]>arr[i+1]){
          num = arr[i];
          arr[i] = arr[i+1];
          arr[i+1] = num;
        }
      }
    }
    return arr;
	}
}
  1. 엔티티 간의 연관 관계 매핑
  • 단방향 연관 관계
    - 한쪽 클래스만 다른 쪽 클래스의 참조 정보를 가지고 있는 관계
    • 일대다 단방향 관계
      • 잘 사용하지 않음 (외래키 표현을 못해서+불필요한 쿼리 발생)
      • 먼저 다대일 단방향 매핑을 하고, 필요한 경우, 일대다 단방향 매핑을 추가하여 양방향 연관 관계를 만듦
  • 양방향 연관 관계
    - 양쪽 클래스가 서로의 참조 정보를 가지고 있는 관계
    - 객체를 외래키처럼 가짐. 가장 기본으로 사용되는 매핑 방식

1) 다대일 매핑

@ManyToOne 
@JoinColumn(name = "MEMBER_ID") // 외래키에 해당하는 컬럼명 적기
private Member member;

2)다대일 매핑에 일대다 매핑 추가 ---> 양방향 매핑

@OneToMany(mappedBy = "member") // N테이블에서 외래키에 해당하는 필드명 적기
private List<Order> orders = new ArrayList<>();
  • 일대일 연관 관계
    - 다대일 매핑과 방식은 같고, 대신 @OneToOne 사용
  1. 다대다 매핑 페어 실습
  • 매핑만 하는 거여서 생각보다 일찍 끝났는데, 실제로 DB적용이 잘 되는지 더미 데이터로 테스트를 해보고 싶어서, JpaRunner 클래스를 따로 만들어서 돌려봤다.
    원래라면 추가적으로 뭔가 더 하지 않았을텐데, 열정적인 페어님 보고 감화되어서 나도 코드를 만들었고, 덕분에 뿌듯한 시간이었다.
  • 커피 정보가 없어서 에러 뜨길래, 커피 클래스에서 생성자 오버로드하고, 정보 넣어줬다.
  • 방금 세션 때 보니까, 우리가 ManyToOne 단방향 매핑만 하고, OneToMany 추가를 통한 양방향 매핑을 안 해서 내일 수정해야겠다.
// 내가 만들어 본 테스트 클래스
@Configuration
public class JpaRunner {
    private EntityManager em;
    private EntityTransaction tx;

    @Bean
    public CommandLineRunner testRunner(EntityManagerFactory emFactory){
        this.em = emFactory.createEntityManager();
        this.tx = em.getTransaction();

        return args -> {
          tx.begin();
          Member member = new Member("hgd@gmail.com", "Gil Dong", "010-7777-7777");
          Stamp stamp = new Stamp();
          Order order = new Order();
          Coffee coffee = new Coffee("바닐라 라떼", "Vanilla Latte", 5000, "SSS");
          OrderCoffee orderCoffee = new OrderCoffee();

          member.setStamp(stamp);
          member.addOrder(order);
          order.addMember(member);

          orderCoffee.setCoffee(coffee);
          orderCoffee.setOrder(order);

          em.persist(member);
          em.persist(coffee);
          em.persist(order);
          em.persist(orderCoffee);
          em.persist(stamp);

          tx.commit();
        };
    }
}
  1. 기타 정리한 것
  • JPA와 달리, Spring Data JDBC는 단방향 연관 관계만 지원
  • @GeneratedValue(strategy = GenerationType.IDENTITY)
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    차이 : identity의 경우, commit 안 하고 persist()만 해도 PK만들어야해서 쿼리문이 DB로 날아감. 반면에 sequence는 commit 전에 식별자를 알 수 있다.
    https://newwisdom.tistory.com/90
  • 객체 그래프 탐색 : 객체를 통해 다른 객체의 정보를 얻는 것
    ex) findOrder.getMember().getMemberId()
  • @OneToMany의 mappedBy 애트리뷰트는 양방향 매핑일 때만 사용
  • 페어님께서 공유해주신 양방향 매핑 자료
    https://velog.io/@dhk22/JPA-%EC%96%91%EB%B0%A9%ED%96%A5-%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84

<느낀 점>
열정적인 페어님을 만나서, 의욕없던 나도 좀 더 열심히 하게 된다.
덕분에 많이 배웠고, 유익한 페어 실습 시간이었다.

0개의 댓글