티스토리 뷰
728x90
반응형
Spring Mybatis 를 주로 사용하다가 Spring JPA를 공부하면서 이들의 차이점이 어떤건지 궁금하여
작성한다.
간략하게 말하자면 둘다 해보면서 느낀 차이점은 확실히 있었다.
Mybatis 일때는 자바의 본 아이덴티티인 객체가 주가 되는 느낌이 아니었지만 확실히 JPA를 사용해보면서 Mybatis보다 객체가 주가된다는 느낌을 더 크게 받았다. 과연 이 이유는 무엇일까?
예시) 테이블 관계
테이블에 맞추어진 모델링
예시)
@Entity
public class Member {
@Id
private Long id;
@Column(name="USERNAME")
private String name;
@Column(name="TEAM_ID") //FK 역할
private Long teamId;
}
@Entity
public class Team{
@Id
private Long id;
private String name;
}
Main
//팀 저장
Team team = new Team();
team.setName("TeamA");
em.persist(team);
//회원 저장
Member member = new Member();
member.setName("member1");
member.setTeamId(team.getId()); //외래 키에 해당 값만 참조
em.persist(member);
조회 시 식별자로 다시 조회, 객체 지향적인 방법이 아님
//조회
Member member2 = em.find(Member.class,member.getId());
//팀 조회(연관관계 없음)
Team team2 = em.find(Team.class,team.getId());
-> 객체를 테이블에 맞추어 데이터 중심으로 모델링 할 경우, 협력 관계를 만들 수 없다.
객체 지향 모델링
예시) 객체의 참조와 테이블의 외래 키를 매핑
@Entity
public class Member {
@Id
private Long id;
@Column(name="USERNAME")
private String name;
@ManyToOne // 다 대 1 (Team 하나에 여러 Member 가 들어간다)
@JoinColumn(name="TEAM_ID")
private Team team;
}
> ORM 매핑
예시)
//팀 저장
Team team = new Team();
team.setName("TeamA");
em.persist(team);
//회원 저장
Member member = new Member();
member.setName("member1");
member.setTeam(team); //단방향 연관관계 설정, 참조 저장
em.persist(member);
//조회
Member member2 = em.find(Member.class,member.getId());
//참조를 사용해서 연관관계 조회
Team team2 = member2.getTeam();
//연관관계 수정
Team team3 = new Team();
team3.setName("team3");
em.persist(team3);
//회원에 새로운 team3로 설정 -> team에서 team3에 대한 값으로 수정된다.
member.setTeam(team3);
참고 자료
728x90
반응형
'프로그램 언어 > Spring JPA' 카테고리의 다른 글
SPRING JPA 상속관계(단일 테이블 전략) (0) | 2023.04.26 |
---|---|
양방향 연관관계 , 연관관계의 주인 (0) | 2023.04.26 |
엔티티 매핑(번외 편) (0) | 2023.04.26 |
엔티티 매핑(기본편) (0) | 2023.04.26 |
영속성 관리 (0) | 2023.04.26 |
250x250
반응형
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- hazelcast
- insert
- 네이버 클라우드
- ncp
- 격리수준
- 리눅스
- centos7
- Cache
- MySQL
- 권한
- Quartz
- dockerfile
- 컨테이너
- 캐시
- docker
- Linux
- 캘린더
- 정의
- 개념 이해하기
- LocalDate
- 이미지
- Java
- dfs
- spring
- 스케줄러
- Lock
- leatcode
- 도커
- 알고리즘
- mybatis
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함