회원용 DAO
public class MemberDAO {
public Member find(String memberID) {
}
public Member save(Member member) {
}
}
객체를 데이터베이스에 CRUD 하려면 너무 많은 SQL과 JDBC API를 코드로 작성해야한다.
JPA 상속
JPA 는 상속과 관련된 패러다임의 불일치 문제를 개발자 대신 해결해준다. 개발자는 자바 컬렉션에 객체를 저장하듯 JPA에게 객체를 저장하면 된다.
객체는 참조를 사용해 다른 객체와 연관관계를 가지고 참조에 접근해 연관된 객체를 조회한다. 반면 테이블은 외래 키를 사용해 다른 테이블과 연관관계를 가지고 조인을 사용해 연관된 테이블을 조회한다.
Class Member {
String id;
Long teamId;
String username;
}
Class Team {
Long id;
String name;
}
특정 ㅎ ㅚ원이 ㅣ소속된 팀을 조회하는 가장 객체지향적인 방법은 참조를 사용하는 것이다.
Team team = member.getTeam();
*객체지향 모델링
객체는 참조를 통해 관계를 맺는다. Member 객체는 team 필드로 연관관계를 맺고 MEMBER테이블은 TEAM_ID 외래 키로 연관관계를 맺기 때문에 객체 모델은 외래 키가 필요 없고 단지 참조만 있으면 된다. 테이블은 참조가 필요없고 외래 키만 있으면 된다. -> 개발자가 변환 역할이 해야함
>저장
TEAM_ID 외래키는 TEAM 테이블의 기본 키라 member.getTeam().getId()로 구할 수 있다.
>조회
SELECT M.*, T.*
FROM MEMBER M
JOIN TEAM T ON M.TEAM_ID = T.TEAM_ID
> 패러다임 불일치를 해결하고 소모하는 비용
*패러다임의 불일치
객체는 속성과 기능을 가지는데, 부모 객체를 상속받았거나 다른 객체를 참조학 ㅗ있다면 객체의 상태를 저장하기 쉽지 않다. (예시: 회원 객체를 저장하는데 회원 객체가 팀 객체를 참조하고 있다면, 회원 객체리를 저장할 때 팀 객체도 함께 저장해야함)
객체와 관계형 데이터베이스는 지향하는 목적이 서로 다르므로 둘의 기능과 표현 방법이 다르다. -> 이것이 패러다임 불일치 문제.
'개인공부' 카테고리의 다른 글
[ORACLE] 새 계정 생성 (0) | 2024.05.05 |
---|---|
[ORACLE] 오라클 설치 (0) | 2024.05.05 |
[flutter] 위치 받아오기 (0) | 2023.12.31 |
[DB 프로젝트] 데이터베이스 팀 과제 후기 (0) | 2023.11.27 |
[ict 한이음] 프로젝트를 끝내고 (0) | 2023.10.12 |