06.JPA(2)

기록하는 용도·2022년 6월 10일

07. JPA 심화

정보관리의 기본인 CRUD를 공부해본다.

  1. week02application 코드에서 return (args) 내용안을 지우고 넣기
// 데이터 저장하기
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(
        () -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
);
  1. course 클래스에서 getid 만들기
  2. 실행하기

update, delete하기전에 service를 알아야한다.

스프링의 구조는 3가지 영역으로 나눌 수 있다.

  1. controller-요청이 들어오면 요청에 응답하는 자동응답기
  2. service
  3. repository-가장안쪽부분이라서 db와 맞닿아있다.

그런데 실제로 db를 꺼내오는애와 응답하는 녀석사이에 연결고리가 있어야한다.
→ 이게 service

근데 update는 밖에서 요청이 들어온다
그래서 repository까지 전달을 해줘야한다.
이때는 중간에 서비스를 활용해야한다!

그래서 update는 service에 작성을한다.

service를 만들어야한다.

  1. Course 클래스 아래에
public void update(Course course) {
    this.title = course.title;
    this.tutor = course.tutor;
}

course라는걸 받았을때 그안에있는 title과 tutor를 ‘업데이트’ 해줘라

2.service 패키지를 만들고 거기안에 서비스를 넣어준다.
(CourseService) 클래스 만들기

@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();
    }
}

@service → 업데이트 할수도있으니까 알아둬
검색을하거나, 업데이트 할때 repository가 필요하니까 final coures~~

  1. update 실행해보기
@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());
        }

        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());
        }
    };
}

첫번째 부분 데이터 조회
두번째 부분
courseService.update(1L, new_course);

update 사용해보기

4.delete 사용해보기

@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());
        }

        ... 중략

        courseRepository.deleteAll();
    };
}

0개의 댓글