인프런 김영한 선생님의 '자바 ORM 표준 JPA 프로그래밍 - 기본편' 강의에서 SQL 중심적인 개발의 문제점에 대해 학습한 내용을 정리한다. ✔ 연관관계 객체는 연관관계 시 참조 사용 : member.getTeam() 테이블은 외래 키 사용 : JOIN ON M.TEAM_ID = T.TEAM_ID 객체에서는 Team -> Member로 이동할 수 없지만 테이블에서는 Team에서 FK를 이용해 Member의 데이터로 가고 싶으면 member와 team을 조인해서 이동할 수 있다. ✔ ORM이란? 🤔 Object-relational mapping(객체 관계 매핑) 객체는 객체대로 설계하고 관계형 데이터베이스는 관계형 데이터배이스대로 설계하면 ORM 프레임워크가 중간에서 매핑을 해주는 것을 의미 대중적인 ..
🤔 준영속 엔티티란? 영속성 컨텍스트가 더는 관리하지 않는 엔티티 📌 준영속 엔티티를 수정하는 2가지 방법 변경 감지 기능 사용 @Transactional void update(Item itemParam) { //itemParam: 파리미터로 넘어온 준영속 상태의 엔티티 Item findItem = em.find(Item.class, itemParam.getId()); //같은 엔티티를 조회한다. findItem.setPrice(itemParam.getPrice()); //데이터를 수정한다. } 영속성 컨텍스트에서 엔티티를 다시 조회한 후에 데이터를 수정하는 방법 트랜잭션 안에서 엔티티를 다시 조회, 변경할 값 선택 => 트랜잭션 커밋 시점에 변경 감지(Dirty Checking)이 동작해서 데이터베이스..
인프런 김영한 T의 실전! 스프링 부트와 JPA 활용1 강의를 들으며 연관관계 매핑 과정에 대해 정리한다. erd 설계 후 엔티티 매핑 과정시에 내가 참고할 용도로 제작하였다. 독자들도 erd 설계 후 이 방식에 맞춰 엔티티 클래스를 개발하면 될 것 같다. 바로 들어가보자. 📌 @--ToMany ✔ (mappedBy = "") 적용 ✔ 예시 @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List orderItems = new ArrayList(); 📌 @--ToOne ✔ (fetch = LAZY) 적용 ✔ @JoinColumn(name="") 적용 ✔ 예시 @OneToOne(fetch = LAZY, cascade = CascadeTy..
오늘은 @Enumerated란 무엇이며 언제 어떻게 사용해야하는지 알아보자. 엔티티 매핑에서 Enum 타입을 사용할 때 @Enumerated 어노테이션을 사용하는데 우선 @Enumerated 어노테이션의 종류는 두 가지이다. ✔ EnumType.ORIGINAL : enum 순서(숫자) 값을 DB에 저장 ✔ EnumType.STRING : enum 이름 값을 DB에 저장 예시를 들어보자. 다음과 같은 enum 클래스에서 어노테이션의 종류가 EnumType.ORIGINAL이라면 ORDER ==> 1로 저장 CANCEL ==> 2로 저장된다. 어노테이션의 종류가 EnumType.STRING이라면 "ORDER", "CANCEL" 로 저장된다. ❌ 근데 EnumType.ORIGINAL은 함부로 사용할 수 없다. ..
오늘은 @Embedded는 무엇이며 언제 어떻게 사용하는지에 대해 알아보자. 바로 시작해보자. 🔥 회원 엔티티가 다음과 같다고 가정해보자. 회원 엔티티는 이름, 도시, 주소 번지, 주소 우편번호를 가진다. 이때 도시, 주소 번지, 주소 우편번호는 회원의 '주소'를 알기 위해 가지는 컬럼들이다. 이때 상세 데이터(도시, 주소 번지, 주소 우편번호) 또한 하나의 객체로 묶어 보다 객체지향적으로 설계할 수 있다. 도시, 주소 번지, 주소 우편번호를 주소라는 객체로 묶어 표현하면 보다 객체지향적인 코드가 될 것이다. 이때 사용하는 것이 @Embedded, @Embeddable이다. @Embeddable @Getter public class Address { private String city; private S..
엔티티 설계시 주의할 점에 대해 학습한 내용을 정리한다. 같이 알아보도록 하자. ✔ 엔티티에는 가급적 Setter를 사용하지 말자! - Setter는 변경 가능하기 때문에, 유지보수가 어렵다. ✔ 모든 연관관계는 지연로딩으로 설정하자! - 즉시로딩(Eager)은 예측이 어렵고, 어떤 SQL이 실행될 지 추적하기 어렵다. 특히나 JPQL을 실행할 때 N+1 문제가 발생할 수 있다! @XToOne(OneToOne, ManyToOne) 관계는 기본이 즉시로딩이르모 직접 지연로딩으로 설정해야한다! ✔ 컬렉션은 필드에서 초기화하자. - null 문제로부터 안전하기 때문이다. 별 내용 없어 보여도 굉장히 중요한 내용이니 꼭 기억하자!! 그럼 오늘도 열심히 개발하자. 🔥
JPA의 플러시에 대해 알아보자. 이전 포스팅과 연결되므로 이전 포스팅을 참고하길 바란다. (이전 포스팅 글씨를 누르면 이동할 수 있다.) 🤔 플러시는 언제 발생할까? 데이터 베이스 트랜잭션이 일어나면 플러시는 자동으로 일어난다! 지난 포스팅에서 db에 쿼리는 commit할 때 날아간다고 했다. 그런데 만약 내가 comimit 하기 전에 db에 쿼리가 제대로 날아가는지 확인하고 싶다면 어떻게 해야할까? 바로 이렇게 하면 된다 em.flush()를 하게 되면 db에 쿼리가 바로 날아간다. 그럼 확인해보자. 보이는가? 구분을 위해 그어둔 ================선이 쿼리문 뒤에 나타났다. 플러시에 대해 정리해보자 플로시는 영속성 컨텍스트를 비우지 않고, 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화..
오늘은 JPA의 영속성 관리에 대해 알아보자. 이전 포스팅과 이어지는 내용이므로 이전 포스팅을 참고하기를 바란다. JPA에서 필수로 알아야 할 단어 중 하나인 '영속성 컨텍스트'에 대해 알아보자. 영속성 컨텍스트란, 엔티티를 영구 저장하는 환경을 의미한다. EntityManager.persist(entity)로 엔티티를 영속성 컨텍스트에 저장한다. 엔티티는 생명주기가 있다. 비영속(new/transient) 우리가 흔히 new 연산자를 이용해 객체를 생성한 상태는 영속성 컨텍스트와 관계가 없는 새로운 상태를 의미한다. 영속(managed) EntityManager.persist(entity)를 하게 되면 영속 상태가 되는데 영속성 컨텍스트에 '관리'되는 상태이다. 위 사진에서 설명한 대로 Member 객..
JPA(Maven)를 이용하여 프로젝트를 시작해보자. 먼저, 아래줄의 링크를 눌러 H2 데이터베이스를 설치해보자. H2 데이터베이스 설치(링크) H2 데이터 장점 가볍다(1.5M) 시퀀스, AUTO INCREMENT 기능을 지원한다. 웹용 쿼리툴을 제공한다. Maven 특징(링크) 자바 라이브러리, 빌드 관리 도구 라이브러리 자동 다운로드 및 의존성 관리 최근에는 Gradle이 점점 유명해짐. ⚙ Project Settings 자바 8 버전 이상 Maven Setting groupId : jpa-basic artifactId : ex1-hello-jpa version : 1.0.0 먼저, pom.xml 파일에 사용할 라이브러리를 추가해보자. 우리는 JPA hibernate 라이브러리와 H2 databas..
- Total
- Today
- Yesterday
- 해커랭크 자바 챌린지
- 22 정보처리 산업기사
- 개발자
- 챌린지
- 강의
- ORM
- 정보처리산업기사
- LinkedList
- 디버깅
- 정보처리 산업기사
- 소스코드
- challenges
- 그리디
- 정보처리산업기사 공부법
- hackerrank challenges
- stack
- 해커랭크 자바
- JPA
- 해커랭크
- 자바
- 백준
- 22 정보처리산업기사
- hackerrank
- Java
- 해커랭크 챌린지
- 자바의 정석
- 풀이
- queue
- BAEKJOON
- 코드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |