JPA로 CRUD중 Uplaod를 할려면 Service의 개념을 알아야한다. (Create, Read, Delete는 Repository만으로 구현 가능)
.
.
스프링의 구조는 총 3가지의 영역으로 나눌 수 있다.
Controller, Service, Repository(DAO)
사이사이의 DTO, Domain(Entity)은 정보를 전달해주는 매개체이다
스프링의 구조에 대하여
Controller:
0. 가장 바깥부분, 요청/응답을 처리한다.
1. 클라이언트(사이트)에서 입력되는 정보들을 받아와 해당 정보들이 어떤 용도로 사용되는지 찾아낸다.
2. 찾아낸 정보들을 용도에 맞는 Service로 보내준다.
Service:
0. 중간 부분, 실제 중요한 작동이 많이 일어나는 부분이다.
1. Client(사이트)에서 받지 않은 정보들 (ex: 생성일자, 수정일자, 회원등급, 고유객체번호 등)을 추가해준다.
2. 각자 용도에 맞게 분류된 Controller에서 받아온 정보들, 추가된 정보들의 기능을 구현시킨다.
3. Repository로 보내는 entity(domain)라는 객체를 생성한다.
Repository(DTO):
0. 가장 안쪽부분, Service와 DB를 연결하는 고리의 역할이다.
1. Entity에 의해 생성된 데이터베이스에 접근하는 메소드를 사용하기 위한 인터페이스이다.
2. 데이터베이스에 적용하고자 하는 CRUD를 정의하는 영역이다.
매개체에 대하여
DTO (Data Transfer Object):
0. DTO는 VO(Value Object)로 불리기도 한다
1. DTO는 계층간 데이터 교환을 위한 매개체이다.
2. VO의 경우 Read Only의 개념을 가지고 있다.
Entity(Domain):
0. 데이터베이스에 쓰일 컬럼과 여러 엔티티 간의 연관관계를 정의한다.1. DB의 table을 하나의 엔티티와 같다고 생각해도 된다.2. 실제 DB의 Table과 1:1 매핑이 되게끔 설계를 해주어야 한다.3. 이 클래스의 필드는 각 Table 내부의 컬럼(데이터)를 의미한다.
Service(Upload) 구현
0. Course.java 클래스에 update 메소드 추가
public void update(Course course) {
this.title = course.title;
this.tutor = course.tutor;
}
1. src > main > java > com.filename > service 패키지(파일) 생성
2. CourseService.java 만들기 (ClassnameService.java)
3.
@Service // 스프링에게 이 클래스는 서비스임을 명시
public class CourseService {
// final: 서비스에게 꼭 필요한 녀석임을 명시
private final CourseRepository courseRepository;
// 생성자를 통해, Service 클래스를 만들 때 꼭 Repository를 넣어주도록
// 스프링에게 알려줌
public CourseService(CourseRepository courseRepository) {
this.courseRepository = courseRepository;
}
@Transactional // SQL 쿼리가 일어나야 함을 스프링에게 알려줌
public Long update(Long id, Course course) {
Course course1 = courseRepository.findById(id).orElseThrow(
() -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
);
course1.update(course);
return course1.getId();
}
}
Delete 구현
CourseRepository.deleteAll(); //테이블 전부 삭제
CourseRepository.deleteByID(1); //1번 테이블 삭제
해당 코드는 Repository 인터페이스를 생성해줘야 구현 가능. -> 링크
'🍃웹개발 Spring' 카테고리의 다른 글
[Spring] API - GET (0) | 2022.09.27 |
---|---|
[String] Lombok이란 (0) | 2022.09.27 |
[Spring] JPA심화 (CRUD)_1 (0) | 2022.09.27 |
[Spring] JPA 상속(extends) (0) | 2022.09.26 |
[Spring] JPA 기초(Domain, Repository) (1) | 2022.09.26 |