Spring Data JPA

Yeeun_Kim·2024년 10월 16일
0

1. JPA(Java Persistence API)

  • 자바진영에서 ORM(Object Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음
  • 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
  • 인터페이스이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현함

2. ORM(Object Relational Mapping)

  • 애플리케이션 Class와 RDB(Relational DataBase)의 테이블을 매핑(연결)한다는 의미
  • 기술적으로 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것

3. 사용 이유

  • 반복적인 CRUD SQL 처리
  • 객체 중심으로 개발 가능함으로써 생산성이 좋아지고, 유지보수 수월해진다.
  • 개발자 관점에서 어떤 SQL이 실행되는지 쉽게 예측 가능
  • 관계 매핑이 어렵거나 성능 이슈가 우려되는 경우 SQL 직접 작성 가능(네이티브 SQL)

4. 기본 사용 방법

build.gradle 의존성 추가

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
//JDBC 드라이버

Entity 작성

BaseEntity.java : 기본 Entity 정보
@EntityListners(AuditingEntityListener.class)
@MappedSuperclass
@Getter
public class BaseEntity {
	@CreateDate
    @Column(updatable = false)
    private LocalDateTime createdDate;
    
    @LastModifiedDate
    private LocalDateTime lastModifiedDate;
    
    @CreateBy
    @Column(updatable = false)
    private String createdBy;
    
    @LastModifiedBy
    private String lastModifiedBy;
}
Member.java
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@ToString(of = {"id", "username", "age"})
public class Member extends BaseEntity {
	@Id @GeneratedValue
    @Column(name = "member_id")
    private Long id;
    
    private String username;
    
    private int age;
}

Repository 작성

MemberRepository.java(Interface)
public interface MemberRepository extends JpaRepository<Member, Long> {}

Service단 사용

@RequiredArgsConstructor //의존성 주입
...
private final MemberRepository memberRepository;
...
public List<Memeber> getMemberList() {
	return memberRepository.findAll();
}
...
  • Service 단에서 memberRepository.findAll을 사용하여 Entity Table 목록 정보를 모두 가져옴
  • 위와 같이 Entity를 그대로 보여주는 것은 보안상 위험하기 때문에 필요정보만 가공하여 DTO(Data Translate Object)를 사용하여 가공하여 보내줘야한다.

참고

https://dbjh.tistory.com/77

0개의 댓글