JPA는 스펙이다.
‘JPA의 구현을 위해 이런 기능들을 작성해라’ 라고 되어 있고, 명시한대로 작성 후 나머지 내부의 세부 구현은 구현자의 마음이다.
이 스펙을 구현하는 구현자를 JPA Provider라고 부르며, 대표로 Hibernate가 있다.
SpringDataJPA는 JPA +@ 로써, JPA를 추상화하여 쉽게 쓰기 위한 스프링 프로젝트이다.
즉, 사용하기 쉬운 인터페이스를 제공해 주는데, 대표로는 JpaRepository가 있다.
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity // 해당 클래스를 Entity로 지정
@Table(name = "Todo") // 생성될 DB 테이블 이름 지정
public class TodoEntity {
@Id // PK 명시
@GeneratedValue(generator = "system-uuid") // 자동으로 생성할 Generator가 무엇인지
@GenericGenerator(name="system-uuid", strategy = "uuid") // PK값 커스텀 생성기
private String id;
private String userId;
private String title;
private boolean done;
}
@Repository
public interface TodoRepository extends JpaRepository<TodoEntity, String> {
// 직접 쿼리 작성. ?1은 메서드 매개변수의 위치
@Query("select * from Todo t where t.userId = ?1")
List<TodoEntity> findByUserId( String userId);
}