반응형
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 기본 실습 환경
기본 실습 엔티티
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 프로그래밍 - 에이콘 출판, 김영한 저
반응형
'Java&Web' 카테고리의 다른 글
[Apache] Apache와 Tomcat 연동하기 (0) | 2020.12.17 |
---|---|
[WEB] Web Server와 WAS (0) | 2020.12.17 |
[JPA] Spring Data JPA (4) - 사용자 정의 Repository (0) | 2020.08.28 |
[JPA] Spring Data JPA (3) - 페이징과 정렬 (2) | 2020.08.28 |
[JPA] Spring Data JPA (2) - 메소드 네임 쿼리, @Query (0) | 2020.08.28 |