| Web Application (Spring + JPA) 1.-- 1. 프로젝트 환경설정 2. 도메일 모델과 테이블 설게 3. 애플리케이션 기능 구현 || 프로젝트 환경 설정-- ||| 프로젝트 구조 분석 --project (프로젝트 루트) |-- src (소스 폴더) | |-- main (실행 코드) | | |-- java (자바 소스 코드) | | |-- resources (리소스) | | ㄴ-- webapp (웹 폴더) | | | ㄴ- test (테스트 코드) | |-- target (빌드 결과) ㄴ- pom.xml (메이븐 설정 파일) ||| 메이븐과 라이브러리 설정-- groupId + artifactId + version 만 적어주면 라이브러리(jar)파일을 메이븐 공식 저장소에서 자동으로 ..
| Native SQL JPQL은 표준 SQL이 지원하는 대부분의 문법과 SQL 함수들을 지원하지만특정 데이터베이스에 종속적인 기능은 지원하지 않음 (Ex.- 특정 데이터베이스만 지원하는 함수, 문법, SQL 쿼리 힌트- 인라인 뷰, UNION, INTERSECT- 스토어드 프로시저)- ... 다양한 이유로 JPQL을 사용할 수 없을 때,JPA는 Native SQL을 통해 SQL을 직접 사용할 수 있는 기능을 제공.- SQL을 개발자가 직접 정의- 네이티브 SQL 사용 시 엔티티를 조회하고, JPA가 지원하는 영속성 컨텍스트의 기능을 그대로 사용 가능 반면, JDBC API 사용 시 단순히 데이터의 나열을 조회 || 사용 ㅇ 결과 타입 정의1public Query createNativeQuery(Stri..
| QueryDSL - 쿼리언어를 코드로 작성할 수 있도록 해주는 오픈소스 프로젝트 - 데이터 조회 기능이 특화 Documentation ko-KR ver. || 설정 ㅇ 라이브러리 추가 및 환경설정 (pom.xml) - querydsl-jpa : QueryDSL JPA 라이브러리12345 com.querydsl querydsl-jpa ${querydsl.version}cs - querydsl-apt : 쿼리 타입 생성 시 필요한 라이브러리123456 com.querydsl querydsl-apt ${querydsl.version} providedcs 12345 org.slf4j slf4j-log4j12 1.6.1cs - 엔티티를 기반으로 쿼리 타입이라는 쿼리용 클래스를 생성1234567891011121..
| JPQL(Java Persistence Query Language) - 테이블이 아닌 엔티티 객체를 대상으로 검색하는 객체지향 쿼리- SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않음- JPA는 JPQL을 분석한 후 적절한 SQL을 만들어 데이터베이스를 조회- 방언(Dialect)만 변경하면 JPQL을 수정하지 않고 자연스럽게 DB 변경 가능 > 회원 엔티티1234567@Entity(name = "Member")public class Member { @Column(name = "name") private String username; // ...}cs > JPQL- 엔티티 이름과 엔티티 객체의 필드 명으로 작성12String jpql = "select m from Member as m wh..
| 고급 매핑 :상속 관계 매핑 :@MappedSuperclass :복합 키와 식별 관계 매핑 :조인 테이블 :엔티티 하나에 여러 테이블 매핑 || 상속 관계 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현 시 선택할 수 있는 방법 1. 각각의 테이블로 변환 : 각각을 모두 테이블로 만들고 조회 시 조인 사용 2. 통합 테이블로 변환 : 테이블을 하나만 사용해서 통합 3. 서브타입 테이블로 변환 : 서브 타입마다 하나의 테이블 생성 ||| 조인 전략 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키 + 외래 키로 사용 12345678910111213141516171819202122232425262728293031323334353637383940..
| 다양한 연관관계 매핑 || 다대일 데이터베이트 테이블의 일(1), 다(N) 관계에서 외래 키는 항상 다(N) 쪽에 존재 ||| 다대일 단방향 [N:1] > 회원 엔티티1234567891011121314151617@Entitypublic class Member { @Id @GeneratedValue @colum(name = "MEMBER_ID") private Long id; private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; // Getter, Setter .. }cs > 팀 엔티티12345678910111213@Entitypublic class Team { @Id @GeneratedValue @Col..
| 연관관계 매핑 객체의 참조와 테이블의 외래 키를 매핑 방향 (Direction) : 단방향, 양방향방향은 객체관계에만 존재하고 테이블 관계는 항상 양방향다중성 (Multiplicity) : 다대일, 일대다, 일대일, 다대다연관관계의 주인 (owner) || 단방향 연관관계 객체 연관관계 : 단방향 관계 Member Team id Team team username id name 테이블 연관관계 : 양방향 관계 MemberTeam id Team team username id name List members ㅇ 객체 연관관계 vs 테이블 연관관계- 객체는 참조(주소)로 연관관계 ㄴ 연관 데이터 조회 시 .get() (참조) 사용 => 단방향ㄴ 객체 그래프 탐색- 테이블은 외래 키로 연관관계ㄴ 연관 데이터 ..