inblog logo
|
{CODE-RYU};
    SPIRNG

    [Spring] JPARepository ,메서드 쿼리(Method Query)

    류재성's avatar
    류재성
    Mar 20, 2024
    [Spring] JPARepository ,메서드 쿼리(Method Query)
    Contents
    1. JPARepository 만들기2. JUnit 테스트하기3. 메서드 쿼리
     
    💡
    JPARepository는 Spring Data JPA에서 제공하는 인터페이스 중 하나로, 데이터 액세스 계층에서의 CRUD(Create, Read, Update, Delete) 작업을 추상화하여 제공한다. JPARepository를 사용함으로써 개발자는 보다 적은 양의 코드로 데이터베이스 연산을 수행할 수 있습니다.
     
     
    notion image
     
     

    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 }
     
    notion image
     
    @Test public void findAll_test(){ // given // when //sort 를 사용해 정렬하기 List<User> userList = userJPARepository.findAll(Sort.by(Sort.Direction.DESC,"id")); System.out.println(userList); // then }
     
    notion image
     
     
    @Test public void delete_test(){ // given int id = 1 ; // when boardJPARepository.deleteById(id); // then em.flush(); }
     
     
    notion image
     
     
     

    3. 메서드 쿼리

     

    3.1 메서드 쿼리란?

    💡
    메서드 쿼리(Method Query)는 Spring Data JPA에서 제공하는 기능 중 하나로, 인터페이스에 정의된 메서드의 이름만으로 쿼리를 생성하는 방법이다. 이 기능을 통해 개발자는 복잡한 쿼리문을 직접 작성하지 않고도, 메서드의 이름을 통해 필요한 데이터 접근 로직을 구현할 수 있다. 메서드 쿼리의 가장 큰 장점은 코드의 가독성과 유지보수성을 높일 수 있다는 것이다.
     
    JPA Query Methods :: Spring Data JPA
    This section describes the various ways to create a query with Spring Data JPA.
    JPA Query Methods :: Spring Data JPA
    https://docs.spring.io/spring-data/jpa/reference/jpa/query-methods.html
    notion image
     
    💡
    메서드명을 카멜표기법으로 작성하면 자동으로 쿼리를 만들어준다.
     
    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 }
    notion image
     
    💡
    메서드명으로 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); }
     
    notion image
     
     
     
     
     
     
    Share article

    {CODE-RYU};

    RSS·Powered by Inblog