1. create & read
// 데이터 저장하기
repository.save(new Course("프론트엔드의 꽃, 리액트", "임민영"));
// 데이터 전부 조회하기
List<Course> courseList = repository.findAll();
for (int i=0; i<courseList.size(); i++) {
Course course = courseList.get(i);
System.out.println(course.getId());
System.out.println(course.getTitle());
System.out.println(course.getTutor());
}
// 데이터 하나 조회하기
Course course = repository.findById(1L).orElseThrow( // ID : 1 조회 // ID의 타입이 Long 이므로 1L
() -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
);
2. update, delete
- Update는 Service 부분에 작성합니다.
- Service의 개념
- 스프링의 구조는 3가지 영역으로 나눌 수 있습니다.
- Controller : 가장 바깥 부분, 요청/응답을 처리함 → 2주차 후반부에 배울 녀석
- Service : 중간 부분, 실제 중요한 작동이 많이 일어나는 부분 → 지금 배울 녀석
- Repo : 가장 안쪽 부분, DB와 맞닿아 있음 → 여태 배운 녀석 (Repository, Entity)
- update, delete로 넘어가기 전에, 다루어야 하는 개념이 바로 Service입니다.
- 스프링의 구조는 3가지 영역으로 나눌 수 있습니다.
- Course 클래스에 추가
(DTO 설정 전 버전)
public void update(Course course) {
this.title = course.title;
this.tutor = course.tutor;
}
(DTO 설정 버전)
public void update(CourseRequestDto requestDto) {
this.title = requestDto.getTitle();
this.tutor = requestDto.getTutor();
}
- service 생성
- CourseService 클래스 (DTO 설정 전)
import com.sparta.week02.domain.Course;
import com.sparta.week02.domain.CourseRepository;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
@Service // 스프링에게 이 클래스는 서비스임을 명시
public class CourseService {
// final: 서비스에게 꼭 필요한 녀석임을 명시
private final CourseRepository courseRepository;
// 생성자를 통해, Service 클래스를 만들 때 꼭 Repository를 넣어주도록
// 스프링에게 알려줌
public CourseService(CourseRepository courseRepository) {
this.courseRepository = courseRepository;
}
//DTO 설정 전
@Transactional // SQL 쿼리가 일어나야 함을 스프링에게 알려줌
public Long update(Long id, Course course) {
Course course1 = courseRepository.findById(id).orElseThrow(
() -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
);
course1.update(course);
return course1.getId();
}
}
DTO 설정 후 - CourseService 클래스
@Transactional // SQL 쿼리가 일어나야 함을 스프링에게 알려줌
public Long update(Long id, CourseRequestDto requestDto) {
Course course1 = courseRepository.findById(id).orElseThrow(
() -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
);
course1.update(requestDto);
return course1.getId();
}
- Application에서 TEST 해보기
- update test (DTO 설정 전)
@Bean
public CommandLineRunner demo(CourseRepository courseRepository, CourseService courseService) {
return (args) -> {
courseRepository.save(new Course("프론트엔드의 꽃, 리액트", "임민영"));
System.out.println("데이터 인쇄");
List<Course> courseList = courseRepository.findAll();
for (int i=0; i<courseList.size(); i++) {
Course course = courseList.get(i);
System.out.println(course.getId());
System.out.println(course.getTitle());
System.out.println(course.getTutor());
}
//DTO 설정 시 변경부분
Course new_course = new Course("웹개발의 봄, Spring", "임민영");
courseService.update(1L, new_course);
courseList = courseRepository.findAll();
for (int i=0; i<courseList.size(); i++) {
Course course = courseList.get(i);
System.out.println(course.getId());
System.out.println(course.getTitle());
System.out.println(course.getTutor());
}
};
}
DTO 설정 후 - Application
CourseRequestDto requestDto = new CourseRequestDto("웹개발의 봄, Spring", "임민영");
courseService.update(1L, requestDto);
- delete test
courseRepository.deleteAll();
courseRepository.deleteById(1L);
'프로그래밍 > SpringBoot' 카테고리의 다른 글
DTO 설정 (DAO/DTO/VO 개념) (0) | 2022.05.22 |
---|---|
Lombok (0) | 2022.05.22 |
JPA (2) - 생성일자, 수정일자 (0) | 2022.05.22 |
JPA (1) - 기본 개념 - Domain/Repository (0) | 2022.05.22 |
Controller VS RestController (0) | 2022.05.21 |