JPA/JPA

객체와 관계형 데이터베이스의 차이

lovineff 2020. 6. 9. 10:15

차이점객체와 관계형 데이터베이스의 차이

상속

연관관계(참조)

 - 참조 : 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