JPA 탄생 배경-1에 이어 작성합니다:)
https://velog.io/@sungjin0757/JPA-%ED%83%84%EC%83%9D-%EB%B0%B0%EA%B2%BD-1
ORM이란?
- Object relational mapping (객체 관계 매핑)
- 객체는 객체대로 설계, 관계형 데이터베이스는 관계형 데이터베이스대로 설계
- ORM 프레임워크가 중간에서 매핑 (객체와 관계형 데이터베이스 사이를 매핑)
즉, 애플리케이션과 JDBC사이에서 동작!- 대중적인 언어에는 대부분 ORM 기술이 존재
탄생 배경 1탄에서 보셨다시피, SQL 중심적인 개발의 문제점과 객체 답게 모델링을 할 수록 처리해야하는 일이 너무 많아진다는 것을 볼 수 있었습니다! 이는 생산성 및 유지보수성의 저하를 이끌 수 있죠
//저장
jpa.persist(member);
//조회
Member member=jpa.find(memberId)
//수정
member.serName(name);
//삭제
jpa.remmove(member);
ex)
public class Book {
private String boolId;
private Item item;
private int price;
//추가 되었다고 가정
private String name;
}
#기존
select bookId,price from Book;
#필드의 추가로 인해 기존의 SQL문도 변경해줘야 처리 가능
select bookId,price,name from Book;
위의 코드와 같은 문제가 발생합니다. 하지만 JPA는 SQL문을 알아서 매핑해주기 때문에 저런 고민을 할 필요가 없어집니다.
패러다임 불일치의 해결
//저장
jpa.persist(book);
//조회
jpa.find(Book.class,bookId);
개발자는 이런 코드만만 쳐주시면 나머지(객체 분해,객체 생성...)는 JPA가 알아서 다 처리하여 줍니다.
Book book1=bookDAO.getBook(100);
Book book2=bookDAO.getBook(100);
book1==book2 //기존 SQL만 이용하여 조회했을 시 달랐지만 JPA를 사용했기 때문에 같음
JPA는 동일한 트랜잭션에서 조회한 엔티티는 같음을 보장 합니다~!
성능 최적화
실무에서는 지연 로딩만 사용된다고 합니다.. 지연 로딩과 즉시 로딩의 예는 많은 양의 개념을 담고 있기 때문에 따로 포스팅 하도록 하겠습니다!
이 글은 인프런 김영한님의 '자바 ORM 표준 JPA 프로그래밍 - 기본편'을 수강하고 작성합니다.
출처:https://www.inflearn.com/course/ORM-JPA-Basic