GitHub

https://github.com/Choidongjun0830

2024/06 17

[JPA 활용1 복습] 도메인 분석 설계

멤버와 오더가 있을 때. 회원이 주문을 하는 것이지만, 멤버와 오더를 동급으로 두고 고민해야 한다.실무에서는 회원이 주문을 참조하지 않고, 주문이 회원을 참조하는 것으로 충분하다.  Getter는 모두 열어두는 것이 편하다.Setter는 모두 열어두면 엔티티가 왜 변경되는지 추적하기 힘들어지기 때문에 Setter를 제공하는 것 대신에, 변경 지점이 명확하도록 변경을 위한 비즈니스 메서드를 별도로 제공해야 한다.  @Embeddable@Getterpublic class Address { private String city; private String street; private String zipCode; protected Address() {} public Address(Str..

Spring 2024.06.27

[JPA 기본편] 객체지향 쿼리 언어2 - 중급 문법

경로 표현식.(점)을 찍어 객체 그래프를 탐색하는 것select m.username -> 상태 필드from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드where t.name = '팀A';m.team은 엔티티로 넘어가는 것. 이것을 단일 값 연관 필드라 함.m.orders. orders는 보통 컬렉션. 컬렉션으로 가는 것을 컬렉션 값 연관 필드라 함. 상태 필드(state field): 단순히 값을 저장하기 위한 필드연관 필드(association field):연관 관계를 위한 필드단일 값 연관 필드: @ManyToOne, @OneToOne, 대상이 엔티티컬렉션 값 연관 필드: @OneToMany, @ManyToMany, 대상이 ..

Spring 2024.06.26

[JPA 기본편] 객체지향 쿼리 언어1 - 기본 문법

JPQL은 엔티티 객체를 대상으로 쿼리. SQL은 데이터베이스 테이블을 대상으로 쿼리.JPQL을 한마디로 정의하면 객체 지향 SQL 하지만, JPQL로 동적 쿼리를 작성하기 불편하다.. Criteria //Criteria CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); CriteriaQuery query = criteriaBuilder.createQuery(Member.class); Root m = query.from(Member.class); String username = "aaaa"; CriteriaQuery cq = quer..

Spring 2024.06.25

[JPA 기본편] 값 타입

JPA는 데이터 타입을 두가지로 분류엔티티 타입@Entity로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적 가능예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능.값 타입int, integer, string처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체식별자가 없고 값만 있으므로 변경시 추적 불가예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체값 타입은 기본값 타입, 임베디드 타입, 컬렉셔 값 타입이 있다.기본 값 타입자바 기본 타입(int, double)래퍼 클래스(Integer, Long)String임베디드 타입(복합 값 타입)컬렉션 값 타입기본 값 타입생명 주기를 엔티티에 의존회원을 삭제하면 이름, 나이 필드도 함께 삭제값 타입은 공유하면 안됨회원 이름 변경 ..

Spring 2024.06.24

[JPA 기본편] 프록시와 연관 관계 관리

프록시멤버와 팀이 연관된 정보라고 했을 때, 어떤 경우에는 멤버만 가져오고 싶고, 어떤 경우에는 멤버와 팀을 다 가져오고 싶을 수 있다.  프록시 기초em.find() vs em.getReference()em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 getReference()를 호출하는 시점에는 데이터베이스의 쿼리를 안하고, 실제 사용되는 시점에 쿼리를 날린다. getId로 사용할 때는 데이터베이스에서 가져오는 것이 아니라서 쿼리를 날리지 않는다. 프록시는 실제 클래스를 상속받아서 만들어지고, 실제 클래스와 겉 모양이 같다. 프록시 객체는 실제 객체의 참조(target)을 보관하고, 프록시 객체를..

Spring 2024.06.23

[프로그래머스] 가장 많이 받은 선물

가장 많이 받은 선물문제 설명선물을 직접 전하기 힘들 때 카카오톡 선물하기 기능을 이용해 축하 선물을 보낼 수 있습니다. 당신의 친구들이 이번 달까지 선물을 주고받은 기록을 바탕으로 다음 달에 누가 선물을 많이 받을지 예측하려고 합니다.두 사람이 선물을 주고받은 기록이 있다면, 이번 달까지 두 사람 사이에 더 많은 선물을 준 사람이 다음 달에 선물을 하나 받습니다.예를 들어 A가 B에게 선물을 5번 줬고, B가 A에게 선물을 3번 줬다면 다음 달엔 A가 B에게 선물을 하나 받습니다.두 사람이 선물을 주고받은 기록이 하나도 없거나 주고받은 수가 같다면, 선물 지수가 더 큰 사람이 선물 지수가 더 작은 사람에게 선물을 하나 받습니다.선물 지수는 이번 달까지 자신이 친구들에게 준 선물의 수에서 받은 선물의 수..

[프로그래머스] [PCCE 기출문제] 9번 / 이웃한 칸 DFS

[PCCE 기출문제] 9번 / 이웃한 칸문제 설명각 칸마다 색이 칠해진 2차원 격자 보드판이 있습니다. 그중 한 칸을 골랐을 때, 위, 아래, 왼쪽, 오른쪽 칸 중 같은 색깔로 칠해진 칸의 개수를 구하려고 합니다.보드의 각 칸에 칠해진 색깔 이름이 담긴 이차원 문자열 리스트 board와 고른 칸의 위치를 나타내는 두 정수 h, w가 주어질 때 board[h][w]와 이웃한 칸들 중 같은 색으로 칠해져 있는 칸의 개수를 return 하도록 solution 함수를 완성해 주세요.이웃한 칸들 중 몇 개의 칸이 같은 색으로 색칠되어 있는지 확인하는 과정은 다음과 같습니다.1. 정수를 저장할 변수 n을 만들고 board의 길이를 저장합니다.2. 같은 색으로 색칠된 칸의 개수를 저장할 변수 count를 만들고 0을..

[JPA 기본편] 고급 매핑

상속 관계 매핑관계형 데이터베이스는 상속 관계가 없음슈퍼 타입 서브 타입 관계라는 모델링 기법이 객체 상속과 유사함상속 관계 매핑: 객체의 상속 구조와 DB의 슈퍼 타입 서브 타입 관계를 매핑슈퍼 타입 서브 타입 논리 모델을 실제 물리 모델로 구현하는 방법각각 테이블로 변환 -> 조인 전략장점테이블 정규화외래키 참조 무결성 제약조건 활용 가능저장공간 효율적 단점조회 쿼리가 복잡함조회시 조인을 많이 사용데이터 저장시 Insert sql 2번 호출@Inheritance(strategy = InheritanceType.JOINED)통합 테이블로 변환 -> 단일 테이블 전략@DiscriminatorColumn이 없어도 DTYPE이 생김.장점조인이 필요 없어서 일반적으로 조회 성능이 빠름조회 쿼리가 단순함단점자식..

Spring 2024.06.20
728x90