JPARepository
는 Spring Data JPA에서 제공하는 인터페이스 중 하나로, 데이터 액세스 계층에서의 CRUD(Create, Read, Update, Delete) 작업을 추상화하여 제공한다. JPARepository
를 사용함으로써 개발자는 보다 적은 양의 코드로 데이터베이스 연산을 수행할 수 있습니다.
1. JPARepository 만들기
package shop.mtcoding.blog.user;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserJPARepository extends JpaRepository<User,Integer> { // <오브젝트 타입, pk의 타입>
}
package shop.mtcoding.blog.board;
import org.springframework.data.jpa.repository.JpaRepository;
public interface BoardJPARepository extends JpaRepository<Board,Integer> {
}
UserJPARepository를 인터페이스로 만들고 JpaRepository 를 상속한다.
JpaRepository<오브젝트타입,pk타입> 을 넣어야 한다. UserJPARepository 를 사용하면 기본적인 CRUD 를 쿼리 없이 실행할 수 있다.
2. JUnit 테스트하기
@DataJpaTest
public class userJPARepositoryTest {
@Autowired
private UserJPARepository userJPARepository ;
@Test
public void save_test(){
// given
User user = User.builder()
.username("happy").password("1234").email("happy@nate.com").build();
// when
userJPARepository.save(user);
// then
}

@Test
public void findAll_test(){
// given
// when
//sort 를 사용해 정렬하기
List<User> userList = userJPARepository.findAll(Sort.by(Sort.Direction.DESC,"id"));
System.out.println(userList);
// then
}

@Test
public void delete_test(){
// given
int id = 1 ;
// when
boardJPARepository.deleteById(id);
// then
em.flush();
}

3. 메서드 쿼리
3.1 메서드 쿼리란?
메서드 쿼리(Method Query)는 Spring Data JPA에서 제공하는 기능 중 하나로, 인터페이스에 정의된 메서드의 이름만으로 쿼리를 생성하는 방법이다. 이 기능을 통해 개발자는 복잡한 쿼리문을 직접 작성하지 않고도, 메서드의 이름을 통해 필요한 데이터 접근 로직을 구현할 수 있다. 메서드 쿼리의 가장 큰 장점은 코드의 가독성과 유지보수성을 높일 수 있다는 것이다.

메서드명을 카멜표기법으로 작성하면 자동으로 쿼리를 만들어준다.
package shop.mtcoding.blog.user;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.query.Param;
public interface UserJPARepository extends JpaRepository<User,Integer> { // <오브젝트 타입, pk의 타입>
User findByUsernameAndPassword(@Param("username") String username, @Param("password") String password);
}
@Test
public void findByUsernameAndPassword_test(){
// given
String username = "ssar";
String password = "1234";
// when
userJPARepository.findByUsernameAndPassword(username,password);
// then
}

메서드명으로 username과 password 를 변수로 한 쿼리를 만들어준다.
3.2 쿼리가 만들어지지 않는 경우
package shop.mtcoding.blog.board;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
public interface BoardJPARepository extends JpaRepository<Board,Integer> {
@Query("select b from Board b join fetch b.user where b.id = :id")
Board findByIdJoinUser(@Param("id") int id);
}
@Query
어노테이션을 활용해 메서드 쿼리로 만들어지지 않는 쿼리를 직접 작성할 수 있다.@Test
public void findByIdJoinUser_test(){
// given
int id = 1;
boardJPARepository.findByIdJoinUser(id);
}

Share article