본문 바로가기

개발스터디/스프링부트 JPA 스터디 (21년)

[JPA] 5. JPA Repository 인터페이스

5-1. Repository란? 

 

Spring Data JPA에서는 여러 종류의 인터페이스의 기능을 통해서 JPA 관련 작업을 별도의 코드 없이

처리할 수 있게 지원합니다.

예를들면 인터페이스의 메서드를 호출하는 형태에 + 기능에 따라서 상속 구조로 추가적인 기능을 제공합니다.

이때 사용하는 인터페이스를 Repository라고 합니다.

  • CRUD 작업
  • 페이징
  • 정렬
Repository
CrudRepository
PagingAndSortRepository
JpaRepository

 

5-2. Jpa Repository 사용하기

 

사실 Repository를 생성할때는 인터페이스를 만들고, JpaRepository를 상속 하는것 만으로도 작업이 끝납니다.

package com.example.demo;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {
}

 

 

그리고 JpaRepository를 사용할때는 엔터티의 타입 정보(Member 클래스 타입)(과 @ID의타입) 을 저장 하게 됩니다.

이렇게 인터페이스의 선언만으로도 자동으로 스프링에 Bean 등록을 하게 됩니다.

 

이제 테스트 해보겠습니다.

기존에 만들어둔 Entity 부터 살펴보겠습니다.


@Entity
@Table(name="MEMBER")
@ToString
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column( name= "ID" )
    private Long id;

    @Column(name = "NAME")
    private String username;


    @Column(length = 200,nullable = false)
    private Long meberDesc;

    private Integer age;

}

보면 알수있는게 해당 엔티티는 Member라는 테이블을 만들어주고 

그안에 컬럼 4개 (id, name, memberDesc, age ) 를 만들어줬을것 같습니다.

그럼 controller을 만들어서 PostMapping으로 데이터를 받아보겠습니다.

 

 

 

 

#MemberController.java

package com.example.demo;

import com.netflix.discovery.converters.Auto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/index")
public class MemberController {
    @Autowired
    MemberRepository memberRepository;

    @PostMapping("/join")
    public String join(@RequestBody Member member){

    Member newmember = memberRepository.save(member);
        return member.getUsername();
    }
}

 

 

console에 입력한 json 형태의 Body중에서 username을 출력하는것을 볼수 있습니다.

{
"id": 3,
"username": "kpkim123",
"meberDesc": 1,
"age": 30
}

또한 database를 확인해보면  이렇게 데이터가 입력된것을 볼수있습니다.

 


5-3. Jpa Repository의 CRUD 테스트 코드 작성

CRUD 를 만들기 전에 junit을 통해서 테스트 코드를 먼저 만든다.

  • create 
  • read 
  • update
  • delete
package com.example.demo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Optional;

public class MemberRepositoryTests extends DemoApplicationTests {
    @Autowired
    private MemberRepository memberRepository;

    @Test
    public void create (){

        Member member = new Member();

        member.setId(1L);
        member.setAge(30);
        member.setMeberDesc(1L);
        member.setUsername("kpkim");

        Member newMember= new Member();

        newMember=memberRepository.save(member);
    }


    @Test
    public void read(){
        Optional<Member> member =memberRepository.findById(1L);
        member.ifPresent(selectMember->{
            System.out.println(selectMember.getUsername());
        });
    }

}