JPA는, SQL을 쓰지 않고, 데이터를 생성, 조회, 수정, 삭제할 수 있도록 해주는 번역기와 같다.
만약 JPA가 없다면?!
String query = "SELECT * FROM EMPLOYEE WHERE ID = ?";
Employee employee = jdbcTemplate.queryForObject(
query, new Object[] {id},new EmployeeRowMapper());
java를 짜다가 SQL을 짜고 코드가 복잡해진다.
JPA가 있다면?
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
설정은 한 줄이면 끝난다.
repository.save(new Customer("Jack","Bauer"));
repository.save(new Customer("joman","ueikhan"));
이렇게 사용할 수 있다.
그렇다면 뒤에 SQL 번역은 JPA가 도와준다.
"테이블"은 Domain, "SQL"은 Repository이다.
courses 라는 테이블에 title, tutor 라는 컬럼을 만들었다.
예제로 이해해보자!
@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;
public String getTitle() {
return this.title;
}
public String getTutor() {
return this.tutor;
}
public Course(String title, String tutor) {
this.title = title;
this.tutor = tutor;
}
}
Interface 란?
JPA는 Repository를 통해서만 사용할 수 있다.
인터페이스는 클래스에서 멤버가 빠진, 메소드 모음집을 말한다.
public interface CourseRepository extends JpaRepository<Course, Long> {
}