도메인 주도 개발 시작하기 리포지터리와 모델 구현 ch4

김종완·2023년 10월 29일
1

리포지터리와 모델 구현

JPA를 이용한 리포지터리 구현

  • 모듈 위치
    • 리포지터리를 구현한 클래스는 인프라스트럭처 영역에 속한다.
    • 리포지터리 구현 클래스를 인프라스트럭처 영역에 위치 시켜서 인프라스트럭처에 대한 의존을 낮춰야 한다.
  • 리포지터리 저장 기능
    • 리포지토리의 save() 메소드에 매개변수로 저장할 엔티티 전달
  • 리포지터리 조회 기능
    • 리턴 타입은 Optional 혹은 해당 객체 사용 가능
    • 식별자를 이용한 조회 -> findById(id)
    • 특정 컬럼을 통한 조회 -> findBy컬럼(컬럼 변수)
    • Criteria 를 이용해 조회
    • JPQL을 이용해 조회
  • 리포지터리 업데이트 기능
    • 트랜잭션 범위에서 변경한 데이터를 자동으로 DB 반영
  • 리포지터리 삭제 기능
    • EntityManager의 remove() 메서드를 이용해 삭제 기능 구현

엔티티와 밸류 매핑에 사용되는 어노테이션

  • @Entity : 객체를 엔티티로 선언하는 데 사용된다.
  • @Table : 엔티티를 매핑할 테이블을 지정하는 데 사용된다. 해당 엔티티는 주로 db에 저장될 table의 이름을 변경하기위해 사용되는 듯 하다.
  • @Embeddable : 값 타입을 선언하는 데 사용된다. 값 타입은 식별자가 없고 값만 저장하는 타입이다.
  • @Embedded : 엔티티 클래스에서 값 타입의 변수를 사용하기 위해 해당 변수에 @Embedded 어노테이션을 붙여서 해당 변수가 임베디드 타입임을 알린다.
  • @AttributeOverride : 하나의 임베디드 타입 속성과 테이블의 컬럼을 매핑하는 방법을 재정의하는데 사용된다.

밸류 컬렉션 매핑

  • 별도 테이블에 매핑
    다음의 어노테이션을 사용하여 별도의 테이블에 매핑
    • @ElementCollection
    • @CollectionTable
  • 엔티티 테이블에 매핑
    다음의 어노테이션을 사용하여 엔티티 테이블에 매핑
    • @ElementCollection
    • @OrderColumn
  • @ElementCollection
    • 엔티티에 벨류 컬렉션을 사용하는 데 사용되는 어노테이션이다.
    • 밸류 컬렉션의 타입을 지정할 수 있다.
    • 벨류 컬렉션의 기본 키를 지정할 수 있다.
  • @CollectionTable
    • 벨류 컬렉션을 매핑할 테이블을 지정하는 데 사용되는 어노테이션이다.
    • 테이블 이름을 지정할 수 있다.
    • 부모 테이블과의 관계를 지정할 수 있다.
  • @OrderColumn
    • 벨류 컬렉션의 순서를 저장할 컬럼을 지정하는 데 사용되는 어노테이션이다.
    • 컬럼 이름을 지정할 수 있다.
    • 컬럼의 데이터 타입을 지정할 수 있다.
profile
개발에 재미를 느끼며 꾸준히 성장하는 개발자 김종완 입니다.

0개의 댓글