Java&Web

[JPA] Spring Data JPA (1) - 소개, 기본

프로그래민 2020. 8. 28. 11:35
반응형

JPA란?

  • Java Persistence API로써 자바진영의 ORM 기술 표준
    ※ ORM : Object-Relational Mapping, 객체와 관계형 데이터베이스의 매핑
  • 기존에 존재했던 패러다임 불일치 문제를 해결
  • 기존 JDBC와는 다르게 객체는 객체대로 설계, RDBMS는 RDBMS대로 설계 후 맵핑하는 방식
    ※ 객체와 RDBMS의 차이 : 상속, 연관관계, 데이터 타입, 데이터 식별 방법
  • 애플리케이션을 SQL이 아닌 객체중심으로 개발하여 생산성과 유지보수를 높임
  • JPA는 인터페이스, 구현체로써 Hibernate, EclipseLink, DataNucleus등을 사용, 대표적으로 Hibernate를 사용

 

Spring Data JPA란?

  • Spring Data JPA는 Spring Data 프로젝트의 하위 프로젝트 중 하나
  • Spring Framework에서 JPA를 편리하게 사용할수 있도록 지원하는 프로젝트
  • 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만으로 기본적인 CRUD를 제공
  • 메소드 이름으로 쿼리기능 제공, @Query로 쿼리기능 제공
  • MyBatis, JDBC Template, QueryDSL과 연동 가능

 

Spring Data JPA 기본 실습 환경

application.properties

 

build.gradle

 

기본 실습 엔티티

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString(of={"id","username","age"})
public class Member {
 
    @Id @GeneratedValue
    @Column(name = "member_id")
    private Long id;
    private String username;
    private int age;
 
    @ManyToOne(fetch = FetchType.LAZY)    //ManyToOne은 FetchType.LAZY 필수
    @JoinColumn(name="team_id")
    private Team team;
 
    public Member(String username, int age , Team team){
        this.username=username;
        this.age=age;
          this.team = team;
        team.getMembers.add(this);        //OneToMany로 인한 추가필수
    }
}
 
                                                 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString(of={"id","name"})
public class Team {
 
    @Id @GeneratedValue
    @Column(name="team_id")
    private  Long id;
    String name;
 
    @OneToMany(mappedBy = "team")
    private List<Member> members = new ArrayList<>();
 
    public Team(String name) {
        this.name=name;
    }
}
 
                                                                                     

 

기본 JPA Repositroy

1
2
3
4
public interface MemberRepository extends JpaRepository<Member,Long> {
 
}
 
                                                             

아무것도 없는 것 처럼 보이지만 Spring Data JPA는 JpaRepository<엔티티 타입, 식별자(PK) 타입>을 상속받음으로써 기본적인 CRUD를 간편하게 제공해준다. @Repository 어노테이션은 생략이 가능하다.

  • Create : void save(Member member)
  • Read : Optional<Member> findById(Long id), List<Member> findAll()
  • Update : JPA는 기본적으로 변경감지라는 것으로 update쿼리를 자동으로 생성. find로 객체를 찾은후 setter로 수정
  • Delete : void delete(Member member), void deleteAll(), void deleteById(Long id)

위와 같은 메소드들을 제공하고, 추가로 나아가 메소드이름으로 쿼리를 생성할 수 있도록 도와준다. 다음게시물에서 다루어 보겠다.

 

출처 : 자바 ORM 표준 JPA 프로그래밍 - 에이콘 출판, 김영한 저

반응형