JpaRepository

bunny.log·2023년 1월 20일
0

JpaRepository는 인터페이스이다. 새 인터페이스를 사용하기 위해서는 새 인터페이스를 작성하고 JpaRepository를 확장(extend)해야 한다.

TodoRepository 인터페이스

package com.example.springTest.persistence;

import com.example.springTest.model.TodoEntity;
import org.springframework.stereotype.Repository;
import org.springframework.data.jpa.repository.JpaRepository;

@Repository
public interface TodoRepository  extends JpaRepository<TodoEntity, String> {


}

TodoRepository 인터페이스는 JpaRepository를 확장 해야 한다. 이때 JpaRepository<T,ID>는 Genetic Type을 받는 것을 주의하자.

  • 첫 번째 매개변수인 T는 테이블에 매핑할 엔티티 클래스이고,
  • 두번째 매개변수 ID는 이 앤티티의 기본 키 타입이다.

우리는 TodoEnitity의 기본 키인 id의 타입인 String를 넣어 줬다.

TodoService에서 TodoRepository사용하기

package com.example.springTest.service;

import com.example.springTest.model.TodoEntity;
import com.example.springTest.persistence.TodoRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Slf4j
@Service
public class TodoService {
	@Autowired
	private TodoRepository repository;
	public String testService(){
		TodoEntity entity = TodoEntity.builder().title("My first todo item").build();
		repository.save(entity);
		TodoEntity saveEntity = repository.findById(entity.getId()).get();
		return saveEntity.getTitle();
	}
}

TodoRepository는 JpaRepository를 상속한다. JpaRepository는 기본적인 데이타베베이스 오퍼레이션 인터페이스 save, findById, findAll등을 제공한다.

그렇다면 기본적인 쿼리가 아닌 쿼리는 어떻게 할까?

TodoRepository에서 이후에 사용할 findBUserId를 구현해보겠다.

package com.example.springTest.persistence;

import com.example.springTest.model.TodoEntity;
import org.springframework.stereotype.Repository;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;

@Repository
public interface TodoRepository  extends JpaRepository<TodoEntity, String> {
    List<TodoEntity> findByUserId(String userId);

}

이 메서드를 작성하면 스프링 데이터 JPA가 메서드 이름을 파싱해서 SELECT * FROM Todo userId = '{userId}'와 같은 쿼리를 작성해 실행한다. 메서드 이름은 쿼리, 매개변수는 쿼리의 Whrer문에 들어갈 값을 의미한다. 더 복잡한 쿼리는 @Query 어노테이션을 이용해 지정할 수 있다.

profile
나를 위한 경험기록

0개의 댓글