Blog

[SpringIntro] 스프링 DB 접근 기술 - 3, Spring Data JPA

Category
Author
citeFred
citeFred
Tags
PinOnMain
1 more property
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
복사
Search
 | Main Page | Category |  Tags | About Me | Contact | Portfolio