JPA 소개
ORM : Object-realational mapping ( 객체 관계 매핑)
- 객체는 객체대로 설계, 관계형 데이터베이스는 관계형 데이터베이스대로 설계한 후 ORM 프레임워크가 중간에서 매핑
- 대중적인 언어에는 대부분 ORM 기술이 존재 (JPA, TypeORM ....)
- 객체와 RDB 두 기둥 위에 있는 기술
JPA : Java Persistence API, 자바 진영의 ORM 기술 표준
- Application과 JDBC 사이에서 동작
- 매핑 정보를 바탕으로 Query 생성 후 DB에 전송 및 결과 반환 받음
- 패러다임의 불일치 해결 (Object - RDB)
- Hibernate (오픈소스) 바탕으로 만들어짐
- JPA는 표준 명세 (인터페이스의 모음)이며 , 구현체 3가지 존재
- Hibernate
- EclipssLink
- DataNucleus
- 장점
- SQL 중심적인 개발에서 객체 중심으로 개발
- 생산성
- 유지보수 ( 낮은 에러 발생율, 시간 단축)
- 패러다임의 불일치 해결 : 상속, 연관관계, 객체 그래프 탐색, 비교(동일한 트렌젝션에서 조회한 엔티티는 같음을 보장)
- 성능 최적화 기능 : 1차 캐시와 동일성( identity) 보장, 쓰기 지연(transactional), 지연 로딩
- 데이터 접근 추상화와 벤더 독립성
- 표준
JPA 시작하기
docker로 h2 db 설치
docker run -d -p 1521:1521 -p 8081:81 -v/Users/cky21c/data/db/h2 --name=h2 oscarfonts/h2:1.4.197;
필수 라이브러리
- hibernate-core
- javax.persistence-api : JPA interface들의 모음
persistence.xml : JPA 설정 파일
- 위치 : resource/META-INF/persistence.xml
- DB name : persistence-unit으로 지정 (하나의 DB당 하나의 Unit)
- property name이 javax.persistence~ : JPA 표준 속성
- property name이 hibernate~ : 하이버네이트 전용 속성
- dialect : 데이터베이스 방언
- JPA는 특정 데이터베이스에 종속되지 않음
- 각 데이터베이스의 SQL문법과 함수인 방언에 맞춰서 Query문 생성
- hibernate는 40가지 이상의 방언 지원
Hello JPA - 애플리케이션 개발
- JPA 구동방식
- Persistence → EntityManagerFactory 만듦
- 그 후 필요한 것들이 있을 때마다 EntityMangerFactory에서 EntityManager 생성
- EntityManagerFactory는 하나의 객체만 생성하여 애플리케이션 전체에서 공유
- EntityManager는 쓰레드간 공유 하지 않고, 사용한 후 바로 폐기 (close 필수) 동시성 이슈 발생 여지가 있기 때문!
- JPA의 모든 데이터 변경은 트랜젝션 안에서 실행 (transaction commit해야만 반영)
- 객체, 테이블 생성
- @Entity : JPA가 관리해야 하는 객체임을 명시. 해당 어노테이션이 있으면 JPA에서 인식
- @Id : 데이터베이스 PK와 매핑
- @Table(name = “”) 으로 table명 지정가능. 없으면 관례에 따라서 매핑
- JPQL
- 객체 지향 SQL, SQL을 추상화한 객체 지향 쿼리 언어
- “검색”시 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리
- SQL과 문법이 유사하지만 엔티티 객체를 대상으로 쿼리 (SQL은 DB table 대상으로 쿼리)
출처 : 자바 ORM 표준 JPA 프로그래밍-기본편 (김영한), 자바 ORM 표준 JPA 프로그래밍(김영한 저)
'Programming > Database & Query' 카테고리의 다른 글
[JPA] 자바 ORM 표준 JPA 프로그래밍 : 다양한 연관관계 매핑 (0) | 2022.02.10 |
---|---|
[JPA] 자바 ORM 표준 JPA 프로그래밍 : 연관관계 매핑 기초 (0) | 2022.01.31 |
[JPA] GenerationType.Sequence 설정시 next value 두 번 호출하는 이유 (0) | 2022.01.25 |
[JPA] 자바 ORM 표준 JPA 프로그래밍 : 엔티티 매핑 (0) | 2022.01.20 |
[JPA] 자바 ORM 표준 JPA 프로그래밍 : 영속성 관리 - 내부 동작 방식 (0) | 2022.01.16 |