차이점객체와 관계형 데이터베이스의 차이
상속
연관관계(참조)
- 참조 : PK, FK
객체는 단방향, DB는 양방향 데이터 조회 가능
JPA(Java Persistence API)
자바 진영의 ORM 기술 표준
Object-relational mapping(객체 관계 매핑)
객체는 객체대로 관계형 DB는 관계형 DB 대로 설계
ORM 프레임워크가 중간에서 매핑
- 패러다임의 불일치 해결
JPA 프로젝트 기본 구조
controller, web : 웹계층
service : 비지니스 로직, 트랜잭션 처리
- 대부분의 로직을 처리함
- 서비스 계층은 단순 엔티티에 필요한 요청을 위임하는 역할
repository : JPA를 직접 사용하는 계층, 엔티티 매니저 사용
domain : 엔티티가 모여 있는 계층, 모든 계층에서 사용
- 도메인 모델 패턴(ORM 사용시 사용함)
트랜잭션 스크립트 패턴(mybatis 사용시)
JPA
EJB - 엔티티 빈(자바 표준)
하이버네이트(오픈 소스)
- JPA(자바 표준)
ㄴ 하이버네이트를 많이 참조하여 만듦
사용이유
SQL 중심 개발 -> 객체 중심 개발
생산성
유지보수
성능 최적화 기능
1차 캐시와 동일성 보장
- 같은 트랙잭션 안에서는 같은 엔티티 반환
Member m1 = jpa.find("");
Member m2 = jpa.find("");
m1 == m2
// SQL 한번만 실행
- 트랜잭션을 지원하는 쓰기 지연
ㄴ 트랙잭션을 커밋할 때까지 INSERT SQL을 모음
ㄴ JDBC BATCH SQL 기능을 사용해서 한번에 SQL 전송
transaction.begin();
em.persist(memberA);
em.persist(memberB);
em.persist(memberC);
// 쿼리를 수행하지 않는다.
transaction.commit(); // 일괄 쿼리 수행
지연 로딩과 즉시 로딩
- 지연 로딩 : 객체가 실제 사용될때 로딩
ㄴ select 이후 select
- 즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회(JPA 옵션으로 사용)
ㄴ select join
*** JPA 모든 작업은 Transaction 안에서 해야한다.
ㄴ 안그러면 작업이 안된다.
JPQL(SQL을 추상화한 객체 지향 쿼리 언어, 객체 지향 SQL)
JPQL을 사용하면 엔티티 객체를 중심으로 개발
SQL은 데이터베이스 테이블을 대상으로 개발
검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색
- 특정 데이터베이스 SQL에 의존하지 않음, 방언으로 쿼리를 자동 생성해준다
모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능
- 애플리케이션이 필요한 데이터만 DB에서 불러오려면 쿼리를 사용해야함.
'JPA > JPA' 카테고리의 다른 글
즉시 로딩과 지연 로딩 (0) | 2020.06.09 |
---|---|
양방향 매핑 예제 (0) | 2020.06.09 |
객체와 테이블 연관관계 매핑 (0) | 2020.06.09 |
엔티티 매핑 (0) | 2020.06.09 |
영속성 컨텍스트 (0) | 2020.06.09 |