오늘 할 일
🧊 코드 스테이츠 49일차
[Spring MVC] JPA 기반 데이터 액세스 계층
- Daily Coding
- JPA(Java Persistence Api)란?
- 엔티티 매핑
다른거
- 1일 1커밋
- 복습
- 아침 운동
오늘 배운 것
🍬 [Spring MVC] JPA 기반 데이터 액세스 계층
JPA(Java Persistence API) 개요
- JPA(Java Persistence API)는 Java 진영에서 사용하는 ORM(Object-Relational Mapping) 기술의 표준 사양(또는 명세, Specification)이다.
- Hibernate ORM은 JPA에서 정의해둔 인터페이스를 구현한 구현체로써 JPA에서 지원하는 기능 이외에 Hibernate 자체적으로 사용할 수 있는 API 역시 지원하고있다.
- JPA에서는 테이블과 매핑되는 엔티티 객체 정보를 영속성 컨텍스트(Persistence Context)에 보관해서 애플리케이션 내에서 오래 지속 되도록 한다.
- 영속성 컨텍스트 관련 JPA API
- em.persist()를 사용해서 엔티티 객체를 영속성 컨텍스트에 저장할 수 있다.
- 엔티티 객체의 setter 메서드를 사용해서 영속성 컨텍스트에 저장된 엔티티 객체의 정보를 업데이트 할 수 있다.
- em.remove()를 사용해서 엔티티 객체를 영속성 컨텍스트에서 제거할 수 있다.
- em.flush()를 사용해서 영속성 컨텍스트의 변경 사항을 테이블에 반영할 수 있다.
- tx.commit()을 호출하면 내부적으로 em.flush()가 호출된다. 이후 데이터베이스에 모두 추가된다. 이후 데이터베이스에 모두 추가된다.
JPA 엔티티(Entity) 매핑과 연관 관계 매핑
엔티티 매핑
- @Entity 애너테이션을 클래스 레벨에 추가하면 JPA의 관리대상 엔티티가 된다.
- @Table 애너테이션은 엔티티와 매핑할 테이블을 지정한다. 필수는 아니고 옵션인데, 추가하지 않는 경우에는 엔티티 클래스 이름이 테이블 이름이 된다. 주로 테이블 이름이 클래스 이름과 다른 경우에 사용한다.
- @Entity 애너테이션과 @Id 애너테이션은 필수로 추가해야 한다. 보통 둘을 같이 사용한다!
- JPA는 IDENTITY, SEQUENCE, TABLE, AUTO 전략 같은 다양한 기본키 생성 전략을 지원한다.
- IDENTITY 전략
- 기본키 생성을 데이터베이스에 위임하는 전략이다.
- SEQUENCE 전략
- 데이터베이스에서 제공하는 시퀀스를 사용해서 기본키를 생성하는 전략이다.
- TABLE 전략
- 별도의 키 생성 테이블을 사용하는 전략이다.
- AUTO 전략
- JPA가 데이터베이스의 Dialect에 따라서 적절한 전략을 자동으로 선택한다.
- IDENTITY 전략
- Java의 원시 타입 필드에서 @Column 애너테이션이 없거나 @Column 애너테이션이 있지만 애트리뷰트를 생략한 경우, 최소한 nullable=false는 설정하는 것이 에러를 미연에 방지하는 길이다.
- java.util.Date, java.util.Calendar 타입으로 매핑하기 위해서는 @Temporal 애너테이션을 추가해야하지만 LocalDate, LocalDateTime 타입일 경우, @Temporal 애너테이션은 생략 가능하다.
- @Transient 애너테이션을 필드에 추가하면 JPA가 테이블 컬럼과 매핑하지 않겠다는 의미로 인식한다.
- 테이블에 이미 저장되어 있는 enum 순서 번호와 enum에 정의되어 있는 순서가 일치하지 않게 되는 문제가 발생하지 않도록 EnumType.STRING 을 사용하는 것이 좋다.
다른거
- 1일 1커밋
프로그래머스에서 Lv.0 공 던지기를 풀었습니다. 습관처럼 for문을 돌려서 해결하려고 했는데, 던지는 횟수마다 값을 저장하는 것 자체가 낭비라는 생각이 들어서 규칙을 식으로 만드는 것이 낫겠다고 생각했습니다. 공을 던지는 횟수인 k에는 첫 시행이 포함되어 있으므로 2씩 증가하는 값을 찾기 위해서는 1을 뺀 값에 2를 곱해야 합니다. 그 결과를 배열의 길이로 나눈 것이 numbers의 인덱스이므로 정답에는 해당 인덱스에 위치한 배열 값을 반환하면 됩니다. 사실 문제에서는 번호가 순차적으로 1부터 증가한다고 했으므로 (k - 1) * 2 % numbers.length + 1을 해주었어도 정답입니다.
Programmers 공 던지기
GitHub - chaning49/algorithm: 코딩테스트를 위한 알고리즘 공부
코딩테스트를 위한 알고리즘 공부. Contribute to chaning49/algorithm development by creating an account on GitHub.
github.com
- 복습
양이 생각보다 방대해서 하루가 모자란 양이었다. 오늘 복습한 내용에 이어서 내일 해야겠다.
- 아침 운동
느낀점
- 내용이 전반적으로 어려워지고 양이 방대해져서 하루가 모자라도 너무 모자라다는 느낌이 강하게 든다. 피로가 쌓이지 않을 수 없는 학습량이라는 생각이 든다.
- 학습량이 늘면서 힘든 부분은 알고리즘에 관련된 커밋 활동이 학습에 방해가 된다는 점이다. 커밋에 시간을 쓰면 쓸수록 시간이 아까워진다... Spring 공부 내용을 커밋해야 할지 고민중이다.
- 운동을 했는데, 팔 안쪽에 통증이 있다. 자세가 무너진 상태로 해서 그런 것 같다. 당분간은 유산소와 하체 운동만 하면서 상황을 지켜봐야 할듯...
내일 할 일
🎊 코드 스테이츠 50일차
[Spring MVC] JPA 기반 데이터 액세스 계층
- Daily Coding
- 연관 관계 매핑
- 연관 관계 매핑 실습
다른거
- 1일 1커밋
- 복습
'TIL' 카테고리의 다른 글
TIL_20221103 (3) | 2022.11.03 |
---|---|
TIL_20221102 (0) | 2022.11.02 |
TIL_20221031 (0) | 2022.10.31 |
TIL_20221030 (0) | 2022.10.30 |
TIL_20221029 (0) | 2022.10.29 |