Spring 심화 주차6일차
0. Java 스킬 향상
- set.add()의 return 은 true/false 이다
- ex) set에 원소 1,2,3이 들어있을 때 set.add(4)는 true , set.add(3)은 false 를 반환한다.
- str.split 을 사용할 때 눈에 보이는 문자 뿐만 아니라 공백도 잘 사용하자
- str.splot(" , ") 과 같이 공백쉼표공백 또 가능하다는 것을 인지하자
- Stack 선언과 간단한 사용 메서드
Stack<Integer[]> stack = new Stack<>();
for (int i : progresses) {
stack.push(i);
}
stack.pop(); //제일 최근 값을 제거, 제거하면서 출력 등 확인 사용 가능
stack.peek(); //가장 최근에 들어간 값을 출력
stack.search(3); //3의 인덱스를 출력해준다
stack.empty(); //비어있으면 True 반환
1. 숙련주차 시험 문제 풀이
- Spring에서 ERD 확인하는 방법
- shift 2번
- persistence 검색
- 더블클릭하여 좌측에 Persistence 탭이 생긴것을 확인
- 들어가서 entityManagerFactory 우클릭하여 첫번 째 항목으로 확인
1) 1차
- @ManytoOne 사용 시 JoinColumn 자동 생성
- ex) JoinColumn(name = "bookstore_id")인것과 똑같이 지어준다. "걸어주는 객체의 필드명_PK)"
- @JoinColumn 옵션
- length : 최초 255자( 1byte) 길어지면 에러가 난다)
- Columndefinition : 자료형이 다양하다 date, text(최대 2byte 저장 가능 > length 문제 해결) , block, 등등이 있다.
- nullable : null이 가능한지 아닌지
- unique : 중복값에 대한 처리를 어떻게 하는지
2) 2차
- @OnetoMany(mappedby= " 관리 주체 entitiy에서 feild명 하나를 가져와서 입력")
- mappedby 옵션은 뒤에 many가 오는 것에만 달릴 수 있다.
- mappedby 옵션 생량 시 Join 테이블을 만들어서 관리가 된다.(단순히 양쪽의 pk값만 가지고 있기에 관리가 어렵다) > 어느 테이블에서 관리할 지 정해주어야 한다.
3) 3차 ( ManyToOne을 사용해야하는 이유)
- @OnetoMany에서 @JoinColumn(name = "")을 안주어주었을 때 중간 테이블이 생성될 때가 있다.
- 중간 테이블 해소를 위해 @JoinColumn을 지정해줘야할 수 도 있다.
- @onetoMany와 ManytoOne의 차이점 : 어느테이블에서 PK를 관리 하냐의 차이다. 하지만 아래 단점으로 인해 ManytoOne을 지향한다.
- 엔티티가 관리하는 외래키가 다른 테이블에 있다.
- 연관관계 관리를 위해 추가로 UPDATE SQL 이 실행 된다.
4) 4차
- manytomany 가 아닌 oneot many 2개를 이용하고 중간 테이블(엔티티)을 이용해 간접적으로 다대다를 구현하는 방식을 지향한다.
2. Spring 기능
1) @Builder
- 빌더 패턴을 사용해야 하는 이유
- 가독성이 좋아진다
- 어떤 값을 먼저 설정하던 상관없다.
- 아래 예시를 통해 Builder패턴의 유용성을 알 수 있다.
- 빌더 패턴을 적용할 객체에 @Builder 어노테이션만 달아주면 자동으로 사용 가능하다.
Bag bag = new Bag("name", 1000, "memo", "abc", "what", "is", "it", "?");
@Builder
public Bag(String name, int money, String memo) {
this.name = name;
this.money = money;
this.memo = memo;
}
Bag bag = Bag.builder()
.name("name")
.money(1000)
.memo("memo")
.letter("This is the letter")
.box("This is the box")
.build();
Bag bag = Bag.builder()
.name("name")
.memo("memo") // memo를 money 대신 먼저!
.money(1000)
.build();
3. 참고자료
1)빌터패턴과 @Builder : https://pamyferret.tistory.com/67