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