BACKEND/JAVA & SPRING

DAO DTO Repository

이-프 2023. 5. 19. 13:19

DAO (Data Access Object)

DB의 data에 접근하기 위한 객체

  • DB에 접근하기 위한 로직을 분리하기 위해 사용
  • 직접 DB에 접근하여 data를 삽입, 삭제, 조회 등 조작할 수 있는 기능 수행
  • MVC 패턴의 Model에서 이와 같은 일을 수행

 

Repository

DB에 접근하기 위한 객체

  • DAO 와 Repository의 상관관계 ?차이점 : 제공/관리(매핑)하는 주체의 차이에 따라 달라짐⇒ DAO : SQL에 대한 매핑 (매핑 레벨 : SQL) ← Persistence Layer(영속성) 에 대한 추상화
  • ⇒ Repository : 자바 객체를 테이블에 매핑 (매핑 레벨 : 객체) ← Domain Layer에 대한 추상화
  • 공통점 : DAL (Data Access Layer, DB 관련 정보를 처리하는 구현체)

 

DTO (Data Transfer Object)

Controller, View, Service 등의 계층 간의 데이터 교환을 위한 자바 빈즈

  • 로직을 갖지 않는 데이터 객체
  • getter/setter 메소드만 가진 클래스

⇒ Spring에서는 DTO에 데이터를 담지 않으면, 레이어 끼리 데이터 전송이 되지 않음

 

 

Entity(Domain)

DB테이블에 존재하는 Cloumn들을 필드로 가지는 객체

  • DB테이블과 1대1 대응
  • 다른 클래스를 상속받거나 인터페이스의 구현체여서는 안됨 (순수한데이터 객체인것이 제일 좋음)
  • example
  • @Entity public class Employee{ @Id (id칼럼) private Long id; private String name; private int age; }

 

현재 진행 중인 프로젝트에 적용

@Entity //(JPA)가 관리하는 객체
@Getter //MemberRecipe 객체의 필드에 접근 가능
public class MemberRecipe {
    @Id //PK역할
    @GeneratedValue(strategy = GenerationType.IDENTITY) //PK의 값을 자동으로 생성하는 전략
    private Long id;
    @ManyToOne
    private Member member;
    @ManyToOne
    private Recipe recipe;

    @Builder //생성자에 @Builder 적용
        // Lombok 어노테이션 , Member와 Recipe 객체를 전달하여 MemberRecipe 객체를 생성 가능
    public MemberRecipe(Member member, Recipe recipe) {
        this.member=member;
        this.recipe=recipe;
                //Member와 Recipe 객체간의 양방향 관계를 설정하기 위한 코드 
        member.getMemberRecipeList().add(this); (A)
        recipe.getMemberRecipeList().add(this); (B)
    }
}
(1)
@OneToMany(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<Ingredient> ingredientList = new ArrayList<>();

(2)
@OneToMany(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
**private List<MemberRecipe> memberRecipeList** = new ArrayList<>();
@OneToMany(mappedBy = "recipe")
**private List<MemberRecipe> memberRecipeList** = new ArrayList<>();
/** 이 Recipe 생성 후 RecipeIngredient의 인자로 넣기. 스크랩 할 때는 MemberRecipe의 인자로 넣기 */

[Java, Spring Boot] DTO, DAO, Repository, Domain(Entity)

'BACKEND > JAVA & SPRING' 카테고리의 다른 글

[JAVA] 입출력Stream이란?  (0) 2023.08.16
JpaRepository save()  (1) 2023.06.11
Servlet(서블릿)  (0) 2023.05.18
JPA  (0) 2023.05.08
[J2KB] 회원관리  (1) 2023.02.17