① ORM
② JPA
③ JPA 구현체
① 장점
특정 데이터베이스에 종속되지 않음
: oracle, mysql, mariadb 등 어떤 데이터베이스를 사용하더라도 JPA 인터페이스 자체는 영향 받지 않는다.
객체 지향적 프로그래밍
: JPA를 사용하면 개발자는 객체 지향적으로 설계할 수 있도록 함
생산성 향상
: 데이터베이스 테이블에 새로운 컬럼이 추가되었을 경우, JPA에서는 테이블과 매핑된 클래스에 필드만 추가하면 된다. 따라서 sql문을 직접 작성하지 않고 객체를 사용해 동작하므로 유지보수와 재사용성 측면에서 유리
② 단점
복잡한 쿼리 처리
: 집계 함수(avg, sum 등) 혹은 정렬(order by)이 복잡하게 사용된 쿼리의 경우 SQL문을 직접사용하는 것이 나을 수도 있다. 이를 보완하고자 JPQL 기술(SQL과 유사한)을 사용할 수 있다.
학습 시간
: 아무래도 JPA의 내용을 제대로 이해하는 데 시간이 소요될 것이다.
영속성 컨텍스트에 접근하여 엔티티에 대한 데이터베이스 작업을 수행. 내부적으로 데이터베이스 커넥션을 사용해 데이터베이스에 접근한다.
① 주요 메서드
※ 마치 M/M와 HDD(DB)의 상호작용과 유사
- CPU연산이 완료된 값은 일단 Buffer에 저장되고 어느 시점에 database에 write된다.
② 영속성 컨텍스트
엔티티를 영구 저장하는 환경으로 엔티티 매니저를 통해 영속성 컨텍스트에 접근할 수 있다.
③ 엔티티 생명주기
- new(비영속)
: new 키워드를 통해 이제 막 생성된 엔티티
- managed(영속)
: 엔티티가 영속성 컨텍스트에 저장된 상태로 영속성 컨텍스트에 의해 관리되는 상태 & 트랜잭션의 커밋 시점에 데이터베이스에 반영(WRITE)
- 준영속 상태(detached)
: 영속성 컨텍스트에 엔티티가 저장되었다가 분리된 상태
- 삭제 상태(removed)
: 영속성 컨텍스트와 데이터베이스에서 삭제된 상태