![[JPA] 02. JPA 시작](https://inblog.ai/_next/image?url=https%3A%2F%2Finblog.ai%2Fapi%2Fog%3Ftitle%3D%255BJPA%255D%252002.%2520JPA%2520%25EC%258B%259C%25EC%259E%2591%26logoUrl%3Dhttps%253A%252F%252Finblog.ai%252Finblog_logo.png%26blogTitle%3D%25EB%25B0%25B1%25EC%2597%2594%25EB%2593%259C%25EB%25B8%2594%25EB%25A1%259C%25EA%25B7%25B8-dohyeong&w=1920&q=75)
메이븐 소개
- 자바 라이브러리, 빌드 관리
- 라이브러리 자동 다운로드 및 의존성 관리
- 최근 Gradle 이 점점 유명해짐
JPA 설정 - persistence.xml
- JPA 설정 파일
- /META-INF/persistence.xml에 위치
- pesrsistence-unit name 으로 이름 지정
데이터 베이스 방언(Dialect
)
JPA는 특정 데이터베이스에 종속하지 않는다
각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다르기 때문에 맞춰 주는 것
Dialect → SQL 표준을 지키지 않는 특정 데이터베이스만의 고유 기능
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F17598a15-cf0c-48fc-b852-37c770d6510b%252FUntitled.png%3Ftable%3Dblock%26id%3D32c6a762-a639-4181-aa94-831aa6e6b6c0%26cache%3Dv2&w=3840&q=75)
→ 약 40가지 이상의 데이터베이스 방언 지원
JPA 구동 방식
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252Fdca1ab7e-f2af-42b5-8716-2a42d1cb4900%252FUntitled.png%3Ftable%3Dblock%26id%3D3afcf39b-960b-4885-b5d4-62f2e110d7f1%26cache%3Dv2&w=3840&q=75)
주의할 점
- EntityMangerFactory 는 하나만 생성해서 애플리케이션 전체에 공유
- 엔티티 매니저는 쓰레드간에 공유는 하면 안됨
- JPA 의 모든 데이터 변경은 트랜잭션 안에서 실행해야함
JPQL 소개
나이가 18살 이상인 회원을 모두 검색하고 싶다면?
- 가장 단순한 조회 방법
- EntityManager.find()
- 객체 그래프 탐색
- JPA를 사용하면 엔티티 객체를 중심으로 개발
- 문제는 검색 쿼리 → 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색
- 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하다
- 애플리케이션이 필요한 데이터만 DB에서 불려오려면 결국 검색조건이 포함된 SQL 이 필요
JPQL
- JPA는 SQL을 추상화한 JPQL 이라는 객체 지향 쿼리 언어 제공
- SQL 과 문법 유사, select from, where, group by, having , join 지원
- JPQL 은 엔티티 객체를 대상으로 쿼리
- SQL은 데이터베이스 테이블을 대상으로 쿼리
- 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리
- SQL 을 추상화해서 특정 데이터베이스 SQL에 의존하지 않음
- JPQL은 한마디로 객체지향 SQL
Share article