@RequiredArgsConstructor //final 변수는 꼭 필요한 것이므로 생성자 만들어줌
@RestController //json 으로 응답해야하므로 표시해줌
public class LectureController {
private final LectureRepository lectureRepository;
@GetMapping("/api/lectures")
public Lecture createLecture(@RequestBody LectureRequestDto requestDto) {
// requestDto 는, 생성 요청을 의미합니다.
// 강의 정보를 만들기 위해서는 강의 제목과 튜터 이름이 필요하잖아요?
// 그 정보를 가져오는 녀석입니다.
// 저장하는 것은 Dto가 아니라 Course이니, Dto의 정보를 course에 담아야 합니다.
// 잠시 뒤 새로운 생성자를 만듭니다.
Lecture lecture = new Lecture(requestDto);
// JPA를 이용하여 DB에 저장하고, 그 결과를 반환합니다.
return lectureRepository.save(lecture);
}
}
@GetMapping("/api/lectures")
=> /api/lectures라는 주소로 get 방식으로 요청이 오면 아래 코드 실행
자바로 DB를 사용하도록 도와주는 것이 JPA이다.
DB에서의 테이블과 SQL이 자바에서의 domain과 repostiory 이다.
테이블 - Domain
'SQL' - Repository
LectureRequestDto requestDto = new LectureRequestDto("웹개발의 봄, Spring", "임민영");
변경할 데이터를 물고 다닐 녀어석 ~
@RequiredArgsConstructor
@Getter
@Setter //물고다닐 데이터 설정
public class LectureRequestDto {
// update 하려는 데이터
private final String title;
private final String tutor;
// 없을 수 잇어서 생성하면 오류날 수도 있는데 @RequiredArgsConstructor 때문에 오류 안남
}
public interface LectureRepository extends JpaRepository<Lecture, Long> {
}
JpaRepository<Lecture, Long>는 인터페이스에 미리 검색 메소드를 정의해두는 것으로 메소드를 호출하는 것만으로 스마트한 데이터 검색을 할 수 있게 된다. JPA는 인터페이스로만 사용가능함, 클래스에서 멤버가 빠진 메소드 모음집
즉 , JpaRepository 기능을 가져와서 LectureRepository가 사용하겠다 ~ 라는 뜻
<>안에는 엔티티 클래스 이름과 ID 필드 타입
@Bean
public CommandLineRunner demo(LectureRepository lectureRepository) {
return (args) -> {ㅎ
Lecture course = new Lecture("웹개발의 봄", "남병관");
// jpa 를 상속한 LectureRepository 를 선언해서 아래와 같은 명령어 가능
// 쿼리문 대신 자바문으로 DB조작 가능
lectureRepository.save(course); //create 부터 insert까지의 기능
lectureRepository.findAll(); // SQL 의 select 기능
};
}