요즘 난 인프런에서 김영한님의 ORM 표준 JPA 프로그래밍 공부중이다.
현재 직장에선 당연히 마이바티스를 이용해 쿼리를 작성중 이지만 조금 더 편한(?)
나를 조금 더 번거롭게 하지 않는 하지만 번거로운 이 JPA를 마스터해 이직할것이다.!
코드로 알아보는 예)
public static void main(String[] args){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
//정석 코드
try {
//order 로 아이디 검색을 통해
Order order = em.find(Order.class, 1L);
//검색을 통해 얻은 MemberId를 담아
Long memberId = order.getMemberId();
//다시 또 member 조회해
Member member = em.find(Member.class, memberId);
//또 그값을 다시 객체에 담아야 하는 굉장히 불편한 작업을 해야한다.
Member findMember = order.getMember();
여기서 그나마 개선점은
@Entity
@Table(name = "ORDERS")
public class Order { //DB는 ORDER이 예약어로 되어있는게 있어서 원랜 orders로 만이씀
@Id @GeneratedValue
@Column(name = "ORDER_ID")
private Long id;
private Member member; //이렇게 하는게 좀더 객체 지향적이라고 할수 있음 이건바로 참조해서 멤버아이디를 넣어 멤버에있는 필드를 사용할수있다.
public Member getMember() {
return member;
}
public void setMember(Member member) {
this.member = member;
}
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
위 코드 처럼 직접 Member 객체를 Order 클래스에 넣어 바로 참조해 사용할 수 있게하는것이 객체지향적이다.
다만 이보다 더 좋은 방법이 있다고 하는데 그건 다음 수업때 나올거같다.