BackEnd/JPA
-
05. JPA 객체지향 쿼리 언어(JPQL)BackEnd/JPA 2021. 8. 13. 17:03
1. JPQL(Java Persistence Query Language)이란? > JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공한다. SQL은 데이터베이스 테이블을 대상으로 쿼리하지만, JPQL은 엔티티 객체를 대상으로 쿼리하며 SQL과 문법 유사하다. (SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원) 2. JPQL 문법 > 엔티티와 속성은 대소문자 구분O (Member, age) > JPQL 키워드는 대소문자 구분X (SELECT, FROM, where) > 엔티티 이름 사용, 테이블 이름이 아님(Member) > 별칭은 필수(m) (as는 생략가능) > 집합함수 : select COUNT(m), SUM(m.age), AVG(m.age), MA..
-
04. JPA 값 타입BackEnd/JPA 2021. 8. 13. 16:12
1. 기본값 타입 > 생명 주기를 엔티티에 의존한다. 값 타입은 공유하면X 1) 자바 기본 타입(int, double) 2) 래퍼 클래스(Integer, Long) 3) String 2. 임베디드 타입(embedded type, 복합 값 타입) (사용법) > @Embeddable: 값 타입을 정의하는 곳에 표시 > @Embedded: 값 타입을 사용하는 곳에 표시 > 기본 생성자 필수 (장점) > 재사용 > 높은 응집도 > Period.isWork()처럼 해당 값 타입만 사용하는 의미 있는 메소 드를 만들 수 있음 > 임베디드 타입을 포함한 모든 값 타입은, 값 타입을 소유한 엔티 티에 생명주기를 의존함 (주의사항) > 임베디드 타입 같은 값 타입을 여러 엔티티에서 공유하면 부작용(side effect)..
-
03. JPA 연관관계 관리BackEnd/JPA 2021. 8. 13. 14:48
1. 즉시 로딩(EAGER)과 지연 로딩(LAZY) > Member Entity : Team Entity ( N : 1 )가 존재할 때 즉시 로딩은 두 엔티티를 한 번에 조회하지만 지연 로딩은 프록시로 조회한다. > 즉시 로딩은 JPQL에서 N+1 문제를 야기하기 때문에 실무에서는 가급적 지연 로딩만 사용한다. JPQL fetch 조인이나 엔티티 그래프 기능을 사용하는 것이 좋다. (@OneToMany, @ManyToMany는 기본이 지연 로딩이다. @ManyToOne, @OneToOne은 기본이 즉시 로딩이기에 LAZY로 설정한다.) tip) 프록시(Proxy) > em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회 > em.getReference(): 데이터베이스 조회를 미루는 가짜(프록..
-
02. JPA Mapping AnnotationBackEnd/JPA 2021. 8. 9. 19:00
Annotation 정의 @Entity JPA가 관리할 객체, JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 > 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자), final 클래스, enum, interface, inner 클래스 사용X (속성) > name : JPA에서 사용할 엔티티 이름을 지정 (기본값: 클래스 이름을 그대로 사용, 기본값 사용 권장) @Table 엔티티와 매핑할 테이블 지정 (속성) > name : 매핑할 테이블 이름 (기본값 : 엔티티 이름을 사용) > catalog : DB catalog 매핑 > schema : DB schema 매핑 > uniqueConstraints(DDL) : DDL 생성 시에 유니크 제약 조건 생성 예) @..
-
01. JPA(Java Persistence API)BackEnd/JPA 2021. 8. 9. 18:00
1. JPA란? JPA란 JAVA의 ORM(Object-Relational Mapping) 기술 표준으로 JAVA 객체(Object)와 관계형 데이터베이스(RDB)를 중간에서 매핑해주는 ORM 프레임워크이다. 2. JPA 사용 이유 1) SQL 중심 > 객체 중심 개발 2) 생산성 > JPA가 SQL문을 만들어 주기 때문에 persist, find, setXX, remove 메서드로 CRUD 수행 3) 유지보수 > 컬럼 추가 시 SELECT/INSERT/UPDATE/DELETE 모든 DML문 수정이 필요했으나, JPA의 경우 필드만 추가 4) 패러다임의 불일치 해결 > 상속, 연관관계, 객체 그래프 탐색, 비교 5) 성능 (1) 1차 캐시와 같은 트랜잭션 안에서는 같은 엔티티를 반환하는 동일성 보장 (2..