Spring에서 JpaRepository 기본 설정 방법과 사용하는 방법에 대해 설명드리겠습니다.
기본 설정
JpaRepository를 사용하기 위한 기본 설정은 아래 글을 참고하시면 됩니다.
[Java] Spring Boot 3 MySQL JPA 연동하기
엔티티 생성하기
JpaRepository를 사용하기 위해서는 엔티티가 필요합니다.
간단한 엔티티를 하나 만들었습니다.
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import lombok.Getter;
@Entity
@Getter
public class TestEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;
@Column(length = 20)
private String name;
}
지금은 DB에 TestEntity라는 테이블이 없는 상태입니다.
엔티티에 설정한 값대로 테이블을 생성하고싶다면 application.yml같은 설정 파일에 아래처럼 설정합니다.
// application.properties
spring.jpa.hibernate.ddl-auto=update
// application.yml
spring:
jpa:
hibernate:
ddl-auto: update
ddl-auto 옵션을 update로 설정했습니다.
update 외에도 create, validate 등 여러 옵션이 있는데, 간단하게 설명을 드리겠습니다.
create나 create-drop은 DB의 테이블들을 모두 삭제하고 생성하는 옵션입니다. 그래서 실 사용되는 DB에는 절대로 사용하시면 안됩니다.
update는 새로 추가되거나 변경된 내용을 적용하는 옵션입니다. 엔티티를 새로 만들었거나 컬럼을 새로 추가하는 등의 변경사항은 반영되지만, 타입 변경 등의 옵션은 반영되지 않습니다.
validate는 엔티티의 설정이랑 실제 DB의 테이블의 설정이 동일한지 검증하는 옵션입니다. 엔티티는 있으나 DB 테이블이 없거나 하는 경우에 서버가 실행되지 않게 합니다.
none은 등록, 수정, 검증 그 어떤 것도 하지 않으려고 할 때 사용합니다.
update로 설정한 후에 서버를 실행하면 @Entity로 설정된 클래스의 정보를 가지고 테이블을 생성합니다.
JPA가 create 쿼리를 생성해주어서 테이블이 생성되었습니다.
JpaRepository 생성하기
다음과 같이 TestEntity에 대한 Repository를 생성합니다.
import org.springframework.data.jpa.repository.JpaRepository;
public interface TestRepository extends JpaRepository<TestEntity, Long> {
}
그러면 JpaRepository에 있는 기능들을 가져다가 사용할 수 있게됩니다.
예를 들어 이렇게 사용할 수 있습니다.
import java.util.List;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
@Service
@RequiredArgsConstructor
public class TestService {
private final TestRepository testRepository;
public List<TestEntity> getTest() {
return testRepository.findAll();
}
}
...
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import lombok.RequiredArgsConstructor;
@RestController
@RequiredArgsConstructor
public class TestController {
private final TestService testService;
@GetMapping("/test/findAll")
public List<TestEntity> getTests() {
return testService.getTest();
}
}
TestService와 TestController를 만들고, 이전에 만든 TestRepository를 가져다가 사용했습니다.
findAll() 메소드는 JpaRepository 내부에 있는, 전체 조회하는 기능을 하는 함수입니다.
아까 생성된 test_entity 테이블에 데이터가 없어서 임의로 데이터를 넣어주었습니다.
데이터를 넣어놓고 서버를 실행한 다음에 요청을 보내면 다음과 같이 데이터가 반환됩니다.
읽으면 좋은 글
[Java] Spring Boot Jpa findBy 단일, 여러개 조건 검색 사용법