티스토리 뷰

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);

 

참고 자료

https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

728x90
반응형
250x250
반응형
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함