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의 인자로 넣기 */
'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 |