자바 ORM 표준 JPA 소개
SQL을 직접 다룰 때 발생하는 문제점
public class Member {
private String memberId;
private String name;
}
다음과 같이 모델을 만들고
public class MemberDAO {
public Member find(String memberId){};
}
다음과 같은 객체를 만든다.
그다음 회원 조회용 SQL 을 만들고
SELECT MEMBER_ID, NAME FROM MEMBER M WHERE MEMBER_ID = ?
그다음 JDBC API를 사용해서 SQL을 실행한다.
ResultSet rs = stmt.executeQuery(sql);
조회 결과를 Member 객체로 매핑한다.
String memberId = rs.getString("MEMBER_ID");
String name = rs.getString("NAME");
Member member = new Member():
member.setMemberId(memberId);
member.setName(name);
SQL에 의존적인 개발
JPA와 문제 해결
패러다임 불일치
객체와 관계형 데이터베이스는 지향하는 목적이 서로 다르므로 둘의 기능과 표현 방법도 다르다. 이것을 객체와 관계형 데이터베이스의 패러다임 불일치 문제라고 한다.
따라서 객체 구조를 테이블 구조에 저장하는 데는 한계가 있다.
1. JPA와 상속
abstract class Item {
Long id;
String name;
int price;
}
class Album extends Item {
String artist;
}
class Movie extends Item {
String direct;
String actor;
}
데이터베이스 모델링에서는
INSERT INTO ITEM
INSERT INTO ALBUM
을 사용해야 한다.
저장
jpa.persist(album);
을 실행하면
다음 SQL을 실행하여 객체를 두 테이블에 나누어 저장한다.
조회
String albumId = "id100";
Album album = jpa.find(Album.class, albumId);
JPA는 ITEM 과 ALBUM 두 테이블을 조인해서 필요한 데이터를 조회하고 그 결과를 반환한다.
SELELCT I.*, A.*
FROM ITEM I
JOIN ALBUM A ON I.ITEM_ID = A.ITEM_ID
2. 객체지향 모델링
public class Member {
private String memberId;
Team team;
private String name;
Team getTeam() {
return team;
}
}
class Team {
Long id;
String name;
}
저장
member1 == member2 ( false )
하지만 JPA는 이를 고려해서 사용한다.
String memberId = "100";
member1 == member2 ( true )
JPA 란 무엇인가
'개발 > 기타개발' 카테고리의 다른 글
SSL 인증방식 그리고 handshake (0) | 2019.02.27 |
---|---|
RESTFul Api 1장 REST 소개 (0) | 2019.02.26 |
정규화 이론 결합종속성 (0) | 2019.01.06 |
마이크로 서비스란 무엇인가 (0) | 2018.12.12 |
intelliJ 에 scss 자동 compiler 적용하기 (0) | 2018.12.05 |
댓글