Entity, DAO, Respository, DTO

JYR00·2023년 4월 14일
0

스프링부트 강의

목록 보기
8/10

SpringBoot 서비스 구조

Client <-DTO-> Controller <-DTO-> Service//ServiceImpl <-Entity->DAO//DAOImpl<-Entity-> DB


Entity(Domain)

  • 데이터베이스에 쓰일 컬럼과 여러 엔티티 간의 연관관계를 정의
  • 데이터베이스의 테이블을 하나의 엔티티로 생각해도 무방
  • 실제 데이터베이스의 테이블과 1:1로 매핑됨
  • 이 클래스의 필드는 각 테이블 내부의 컬럼(Column)을 의미

Repository

  • Entity에 의해 생성된 데이터베이스에 접근하는 메소드를 사용하기 위한 인터페이스
  • Service와 DB를 연결하는 고리의 역할을 수행
  • 데이터베이스에 적용하고자 하는 CRUD를 정의하는 영역

DAO(Data Access Object)

  • 데이터베이스에 접근하는 객체를 의미(Persistance Layer)

  • Service가 DB에 연결할 수 있게 해주는 역할

  • DB를 사용하여 데이터를 조회하거나 조작하는 기능을 전담

DTO(Data Transfer Object)

  • DTO는 VO(Value Object)로 불리기도 하며, 계층 간 데이터 교환을 위한 객체를 의미한다.

  • VO의 경우 Read Only의 개념을 가지고 있음


Entity와 DTO의 차이

  • entity는 db와 동일하게 만들어져있는 클래스를 의미. dto는 용도에 따라 컬럼을 추가하거나 제외할 수 있기 때문에 이 것에서 entity와 dto의 차이가 나온다.

	<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
			<version>3.0.4</version>
		</dependency>


ProductDAO

package com.example.testproject.data.dao;

import com.example.testproject.data.entity.ProductEntity;

public interface ProductDAO {
    ProductEntity saveProduct(ProductEntity productEntity);
    ProductEntity getProduct(String productId);
}

ProductDAOImpl

package com.example.testproject.data.dao.impl;

import com.example.testproject.data.dao.ProductDAO;
import com.example.testproject.data.entity.ProductEntity;
import com.example.testproject.data.repository.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class ProductDAOImpl implements ProductDAO {
    ProductRepository productRepository;

//    자동으로 연결시켜준다
//    싱글톤 패턴을 지향하기 때문에 autowired로 미리 한 객체를 띄워놓고 필요할 때 마다 사용하는 구조.
    @Autowired
    public ProductDAOImpl(ProductRepository productRepository){
        this.productRepository = productRepository;
    }

    @Override
    public ProductEntity saveProduct(ProductEntity productEntity){
        productRepository.save(productEntity);
        return productEntity;
    }

    @Override
    public ProductEntity getProduct(String productId) {
        ProductEntity productEntity = productRepository.getById(productId);
        return productEntity;
    }
}


ProductEntity

package com.example.testproject.data.entity;

import lombok.*;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
//entity를 기반으로 테이블을 자동생성해준다.
@Table(name = "product")

public class ProductEntity {
    @Id
    String productId;
    String productName;
    String productPrice;
    String productStock;
}

ProjectRepository

package com.example.testproject.data.repository;

import com.example.testproject.data.entity.ProductEntity;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ProductRepository extends JpaRepository<ProductEntity, String> {
}

























0개의 댓글