JPA를 편리하게 사용 할 수 있는 Spring Data JPA
Table of Content
JpaRepository 인터페이스
SpringDataJpa는 수많은 기능들이 포함된 JpaRepository 인터페이스가 있으며 개발자는 단순하게 Repository에 JpaRepository 인터페이스를 상속받아서 기능을 이용 할 수 있다.
따라서 일반적으로 사용되는 메소드들을 대부분 중복 제거하여 사용 할 수 있어 간편하게 데이터베이스와 맵핑 할 수 있어 생산성이 높아진다.
package com.example.demoapp.repository;
import com.example.demoapp.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface SpringDataJpaRepository extends JpaRepository<Member, Long>, MemberRepository {
@Override
Optional<Member> findByName(String name);
}
Java
복사
extends 로 상속된 JpaRepository 부분을 들어가보면 해당 인터페이스에서 제공되는 메서드들을 확인 할 수 있다.
코드 리팩토링
SpringDataJpa를 통해 코드가 간소화되었으며 Lombok을 활용하여 더욱 불필요한 코드를 정리해보고자 한다.
우선 계층마다 생성자 주입으로 의존성 주입된 다른 계층들은 직접 생성자를 작성했었지만 @AllArgsConstructor 어노테이션으로 제거 할 수 있다.
@Controller
@AllArgsConstructor
public class MemberController {
private final MemberService memberService;
...
}
Java
복사
@Service
@AllArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;
...
}
Java
복사
기본 생성자는 @NoArgsConstructor 어노테이션으로 제거 할 수 있다. 엔티티인 Member.java에서 적용 한다.
@Entity
@Getter
@NoArgsConstructor
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String name;
public Member(String name){
this.name = name;
}
}
Java
복사
엔티티 클래스에서는 Setter사용을 권장하지 않는다. 따라서 Dto클래스를 작성하고 이부분에 @Getter, @Setter 어노테이션을 사용하고자 한다. 기존 MemberForm.java가 Dto용도로 사용되었기 때문에 명칭을 MemberFormRequestDto로 보다 명확하게 변경하고 패키지도 controller위치에서 별도로 dto 패키지로 이동시켰다.
package com.example.demoapp.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class MemberFormRequestDto {
private String name;
}
Java
복사
Related Posts
Search