Client <-DTO
-> Controller <-DTO
-> Service//ServiceImpl <-Entity
->DAO//DAOImpl<-Entity
-> DB
데이터베이스에 접근하는 객체를 의미(Persistance Layer)
Service가 DB에 연결할 수 있게 해주는 역할
DB를 사용하여 데이터를 조회하거나 조작하는 기능을 전담
DTO는 VO(Value Object)로 불리기도 하며, 계층 간 데이터 교환을 위한 객체를 의미한다.
VO의 경우 Read Only의 개념을 가지고 있음
<!-- 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>
package com.example.testproject.data.dao;
import com.example.testproject.data.entity.ProductEntity;
public interface ProductDAO {
ProductEntity saveProduct(ProductEntity productEntity);
ProductEntity getProduct(String productId);
}
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;
}
}
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;
}
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> {
}