JPA는, SQL을 쓰지 않고 데이터를 생성,조회,수정,삭제 할 수 있도록 해주는 번역기이다.
JPA를 사용하기 위해서는 build.gradle - dependencies 에
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
를 작성해주면 되지만 나는 프로젝트를 생성할 때 JPA를 포함시켰기 때문에 따로 작성하지 않아도 있더라.
@NoArgsConstructor // 기본생성자를 대신 생성해줍니다.
@Entity // 테이블임을 나타냅니다.
public class Course {
@Id // ID 값, Primary Key로 사용하겠다는 뜻입니다.
@GeneratedValue(strategy = GenerationType.AUTO) // 자동 증가 명령입니다.
private Long id;
@Column(nullable = false) // 컬럼 값이고 반드시 값이 존재해야 함을 나타냅니다.
private String title;
@Column(nullable = false)
private String tutor;
//Getter 만 설정.
//Setter 는 나중에 Repository 에서 자동으로 해주기 때문에 여기서 설정 하지 않음.
public String getTitle() {
return this.title;
}
public String getTutor() {
return this.tutor;
}
//생성자
public Course(String title, String tutor) {
this.title = title;
this.tutor = tutor;
}
}
Class 이름은 본인이 만들고 싶은 테이블 명으로 만들어 주면 된다. 필드들은 @Column으로 나타내는 것 같고 필드명은 private String title;
에서 title 부분이기 때문에 원하는 이름으로 만들어 주면 된다.
이렇게 하면 Course란 이름의 테이블에 title과 tutor 2개의 필드를 가진 데이터베이스가 만들어진다.
뒤에 더 공부하고 나서 안 사실인데 이 뒤에 Lombok 이란 것을 배우면 중간에 Getter 부분은 작성해주지 않아도 된다;;; 롬복 최고~
repository.save(); //저장
repository.findAll(); //전체 찾기
예제 코드를 살펴보자
// 데이터 저장하기
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("해당 아이디가 존재하지 않습니다.")
);
위 코드에서 젤 먼저 .save()로 데이터를 저장하고, findAll() 로 전체 조회 후 for 문으로 Id,title,tutor 하나씩 보여주는 코드 짜기. 또 밑에 findById()는 Id 값으로 데이터를 조회하는 건데
처음에 Id를 Long 타입으로 넣었기 때문에 1L
로 작성해준 것이다.
@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());
}
};
}
먼저 .save로 데이터를 하나 입력하고 잘 입력되었는지 조회해본다.
그러면 ‘프론트엔드의 꽃, 리액트’ 라는 것이 저장되었다라고 출력 될 것이다.
그 후 밑에 코드에서 new_course 를 만들어서 데이터를 입력!
.update() 에서 → (1L = 1번째 Id , new_course = 바로 윗 줄에서 작성한 새로운 데이터)
그리고 업데이트가 잘 되었는지 조회를 해본다.
이 부분도 뒤에 Dto를 배우면 수정하게 된다. 일단 코드를 자세히 한 번 보자!
그리고 Delete는 말도 안 나올 만큼 쉬워버린다.
courseRepository.deleteAll();
이 한줄을 작성해주면 course에 있는 데이터들이 다 사라진다.
.deleteAll() 말고 다른 걸 사용해서 하나만 지우는 것도 가능!
사실 Update,Delete사이에는 Service 라는 것을 알아야 하는데
지금 몇 번 보고 있는데도 정확하게 모르겠다;;;
나중에 다시 공부해서 꼭 올려보도록 하겠다!!!