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());
});
}
}
'개발스터디 > 스프링부트 JPA 스터디 (21년)' 카테고리의 다른 글
[JPA] 4. JPA와 DB의 동작 관계 (0) | 2021.07.01 |
---|---|
[JPA] 3. 엔티티 클래스와 어노테이션 (0) | 2021.07.01 |
[JPA] 2. 객체 매핑이란? (0) | 2021.06.29 |
[JPA] 1. JPA란 어떤것인가? (0) | 2021.06.27 |
[4주차] 진행사항 (0) | 2021.01.17 |