임베디드 타입, JPQL

노건우·2023년 10월 11일
0

Spring

목록 보기
19/22
post-thumbnail

임베디드 타입

  • 새로운 값 타입을 직접 정의할 수 있다.
  • jpa는 임베디드 타입(embeded type)이라고 함
  • 주로 기본값 타입을 모아서 만들어서 복합값 타입이라고도 함

jpq에서 임베디드 타입 사용법

  • @Embeddable : 값 타입을 정의하는 곳에 표시
  • @Embedded : 값 타입을 사용하는 곳에 표시
    기본 생성자 필수

임베디드 타입의 장점

  • 재사용
  • 높은 응집도
  • Period.iswork()처럼 해당 값 타입만 사용하는 의미있는 메소드를 만들수 있다.(객체지향적 설계가 가능하다)
  • 임베디드 타입을 포함한 모든 값 타입은, 값 타입을 보유한 엔티티 생명주기

임베디드 타입과 테이블 매핑

  • 임베디드 타입은 엔티티의 값일 뿐이다.
  • 임베디드 타입을 사용하기 전과 후의 매핑하는 테이블은 같다.
  • 객체와 테이블을 아주 세밀하게 매핑하는 것 가능
  • 잘 설계한 ORM애필리케이션은 매핑한 테이블의 수보다 클래스의 수가 더 많다.

@AttributeOverride : 속성 재정의

  • 한 엔티티에서 같은 값 타입을 사용하려면 컬럼 명이 중복
  • @AttributeOverride, @AttributeOverrides를 사용해서 컬럼 명 속성을 재정의

객체 타입의 한계

  • 항상 값을 복사해서 사용하면 공유 참조로 인해 발생하는 부작용을 피할 수 있다
  • 문제는 임베디드 타입처럼 직접 정의한 값 타입은 자바의 기본타입이 아니라 객체 타입이다
  • 자바 기본 타입에 값을 대입하면 값을 복사한다.
  • 객체 타입은 참조 값을 직접 대입하는 것을 막을 방법이 없다
  • 객체의 공유 참조는 피할 수 없다

Spring, thymeleaf, JPA,
->JPQL
->통합 프로젝트
queryDSL

객체지향 쿼리 언어(JPQL)

10-1. JPA는 다양한 쿼리 방법을 지원한다.

  • JPQL
  • QuetyDSL
  • JPA Criteria
  • 네이티브 SQL
  • JDBC API 직접 사용
  • MyBatis
    -SpringJDBCTemplate

JPQL 소개

  • 단순한 조회 : EntityManager.find()
    -> 나이가 18세 이상인 회원을 모두 검색하고 싶다면?

JPQL이란

  • jpa를 사용하면 엔티티 객체를 중심으로 개발
  • 문제는 검색 쿼리
  • 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색
  • 모든 db데이터를 객체로 변환해서 검색하는 것은 불가능
  • jpa는 sql을 추상화한 jpql이라는 객체 지향 쿼리 언어를 제공
  • sql문법이 유사, select,from.where,group by, having,join지원
  • JPQL 엔티티 객체를 대상으로 쿼리
  • SQL은 데이터베이스 테이블 대상으로 쿼리
  • JAVA Persistence Query Language
  • jpql을 한마디로 정의하면 객체지향 sql이다.

jpql 문법

  • 대소문자 구분
    -> 엔티티와 속성은 대소문자 구분
    -> jpql 키워드는 구분하지 않음
  • 엔티티 이름
    ->테이블명 대신 엔티티명을 사용
    -> @Entity(name="...")
    -> 지정하지 않을 시 클래스명을 기본값으로 사용(추천)
  • 별칭은 필수
    -> jpql은 별칭 필수
    -> AS는 생략 가능
profile
초보 개발자 이야기

0개의 댓글

관련 채용 정보