02. JPA 시작하기
ex1-hello-jpa 프로젝트 코드 에서 실습함
#
프로젝트 생성#
H2 DB 설치와 실행- h2database.com
- Mac이라 All Platform으로 다운
- download 경로 풀어놓음 (까먹을까봐 ㅎㅎ)
- 다운로드 경로에
./bin/h2.sh
실행 - Server 모드로 실행
- 로컬 실습용 (테스트용) DB
- 가벼움
- 웹 콘솔 환경 지원
- SQL 지원
- 시퀀스, AUTO INCREMENT 기능 지원
#
프로젝트 생성- Java 8 이상
- Maven 설정
- groupId: jpa-basic
- artifactId: ex1-hello-jpa
- version: 1.0.0
#
의존성pom.xml 에 dependencies 추가
#
persistence.xml 추가- JPA 설정 파일
main/resources/META-INF/persistence.xml
경로로 세팅- persistence-unit name으로 DB 이름 지정
persistence.xml
#
DB 방언- JPA는 특정 DB 종속 X
- DB 벤더마다 다른 표현들을 방언
dialect
라 표현- 페이징: MySQL은 LIMIT, Oracle은 ROWNUM
- mysql, oracle, h2 등 각각 dialect 가 있음
- javax 로 시작하는 property
- hibernate에 의존적이지 않음
- hibernate.dialect
- hibernate의 전용 옵션
#
앱 개발#
JPA 구동 방식Persistence
가META-INF/persistence.xml
의 설정정보 조회Persistence
가EntityManagerFactory
를 생성- 팩토리가
EntityManager
를 필요할때마다 찍어냄
#
실습- option command v -> 변수 자동완성
- h2 콘솔 시작 시, jdbc url은 persistence.xml 에서 설정한 값과 똑같이 설정
#
JPA 활용한 Member Entity 실습- JPA는 transaction 단위가 중요
transaction 지정 시, console에 쿼리가 찍힘
- JPA가 맵핑 정보를 보고 쿼리를 만들어 줌
#
주의 사항- EntityManagerFactory 는 앱이 실행되는 시점에서 하나만 만들어져야 함
- EntityManager 는 여러 스레드간 공유 X (사용하고 버려야 함)
- 계속 요청마다 썼다가 지웠다하는 역할 (DB 커넥션을 쓰고 바로 돌려주듯이)
JPA의 모든 데이터 변경은 트랙잭션 안에서 실행
#
JPQL 소개객체 지향 SQL, 뒤에서 상세히 다루게 됨
- 현업에서의 고민
- 필요한건 조인도 해야되고... 원하는 데이터만... 통계성 쿼리도...
- JPA에선 JPQL로 도와줌
- JPA를 사용하면 엔터티 객체 중심으로 개발 됨
- 문제는 검색쿼리... 조인 남발..
- 검색을 할 때도 테이블이 아닌
엔터티 객체
를 대상으로 검색 - 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능
- 앱이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요
#
SQL과 차이- JPQL은 엔터티 객체 중심의 쿼리
- SQL은 DB의 테이블 대상임
#
장점- dialect를 바꿔도 JPQL을 바꾸지 안아도 됨
- 객체 지향 개념을 쿼리에 적용할 수 있음