Spring/Spring Boot

[Spring] 05. JPA - CRUD (Spring Service layer)

민돌v 2021. 11. 11. 14:29

이번에는 JPA Repository를 이용해 CRUD를 하는 방법을 익혀보자

 

1. 데이터 저장하기(Create) & 조회하기 (Read)

* Repository의 save와 findAll 등을 이용합니다.

// 데이터 저장하기
lectureRepository.save(new Lecture("프론트엔드의 꽃, 리액트", "임민영"));

// 데이터 전부 조회하기
List<Lecture> lectureList = lectureRepository.findAll();
for (int i = 0; i < lectureList.size(); i++) {
    Lecture lecture = lectureList.get(i);
    System.out.println(lecture.getId());
    System.out.println(lecture.getTitle());
    System.out.println(lecture.getTutor());
}

// 데이터 하나 조회하기
Lecture lecture = lectureRepository.findById(1L).orElseThrow(
        () -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
);

- jpaRepository의 save 함수를 이용해 간단하게 데이터를 생성할 수 있습니다.

- findAll() 함수를 이용해 모든 데이터를 불러와 조회합니다.

- findById(1L) :  ID값과 자료형을 매개변수로 보내 데이터가 있는지 확인하고 반환한다. (스프링은 대용량 서비스에서 주로 사용하기 때문에 Long 자료형을 ID값으로 사용한다.)

 

 

 

2. Service의 개념

JPA Update를 하기전에 Service의 개념을 먼저 알아야한다.

다시, 스프링의 구조는 위의 3가지 영역

1. controller : 가장 바깥 부분, 요청/응답을 처리함

2. Service : 중간 부분, 실제 중요한 작동이 많이 일어나는 부분

3. Repo : 가장 안쪽 부분, DB와 맞닿아 있음.

 

✅ Update는 Service 부분에 작성합니다.

서비스는 실제 비지니스 로직이 일어나는 부분입니다.

먼저 update는 데이터를 수정하는 것이기에, domain 패키지의 lecture Class(Table)에 update 함수를 만듭니다.

public void update(Lecture lecture) {
    this.title = lecture.title;
    this.tutor = lecture.tutor;
}

 

그 다음, 로직을 처리해줄 ,Service를 만듭니다.

src > main > java > com.sparta.item01 > service 패키지 생성

LectureService.java 만들기

@Service // 스프링에게 이 클래스는 서비스임을 명시
public class LectureService {

		// final: 서비스에게 꼭 필요한 녀석임을 명시
    private final LectureRepository lectureRepository;

		// 생성자를 통해, Service 클래스를 만들 때 꼭 Repository를 넣어주도록
		// 스프링에게 알려줌
    public LectureService(LectureRepository lectureRepository) {
        this.lectureRepository = lectureRepository;
    }

    @Transactional // SQL 쿼리가 일어나야 함을 스프링에게 알려줌
    public Long update(Long id, Lecture lecture) {
        Lecture lecture1 = lectureRepository.findById(id).orElseThrow(
                () -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
        );
        lecture1.update(lecture);
        return lecture1.getId();
    }
}

 

Service를 이용해 데이터 update 하기

@Bean
public CommandLineRunner demo(CourseRepository lectureRepository, LectureService lectureService) {
    return (args) -> {
        lectureRepository.save(new Lecture("프론트엔드의 꽃, 리액트", "임민영"));

        System.out.println("데이터 인쇄");
        List<Lecture> lectureList = lectureRepository.findAll();
        for (int i = 0; i < lectureList.size(); i++) {
            Lecture lecture = lectureList.get(i);
            System.out.println(lecture.getId());
            System.out.println(lecture.getTitle());
            System.out.println(lecture.getTutor());
        }

        Lecture new_lecture = new Lecture("웹개발의 봄, Spring", "임민영");
        lectureService.update(1L, new_lecture);
        lectureList = lectureRepository.findAll();
        for (int i = 0 ; i < lectureList.size() ; i++) {
            Lecture lecture = lectureList.get(i);
            System.out.println(lecture.getId());
            System.out.println(lecture.getTitle());
            System.out.println(lecture.getTutor());
        }
    };
}

 

delete 는 간단하게 jpa Repository를 이용한다.

lectureRepository.deleteAll();

레이어 이해를 위해, jpa repository를 바로 컨트롤러 부분에서 생성 삭제를 진행했지만, 원래라면, 업데이트 처럼

모든 비지니스 로직 부분을 서비스단에서 실행해야만 한다.

 

정말 간단하게만 알고가는 느낌이다. 후,, 일단 spring의 구조에 익숙해지자

 

다음에는 spring 코드를 줄여줄 lombok에 대해서 알아보자