💡 ORM 이란 ?
- Object-relational mapping (객체 관계 매핑)
- 객체는 객체대로, 관계형 DB는 관계형 DB대로 설계
- ORM 프레임워크가 중간에서 매핑
SQL
중심적 개발 -> 객체
중심 개발
생산성
jpa.persist
(member)jpa.find
(memberId)member.setName
("변경할 이름")jpa.remove
(member)유지보수
패러다임의 불일치 해결
성능 최적화
데이터 접근 추상화와 벤더 독립성
표준
JPA는 persistence.xml
을 통해 필요한 설정 정보를 관리한다. 이 설정 파일이 META-INF/persistence.xml
경로에 있으면 추가 설정 없이 JPA 가 인식할 수 있다.
JPA 는 데이터베이스에 종속적이지 않다. 하지만, 각 데이터베이스마다 제공되는 SQL 문법이 다르다는 문제가 있으므로, 해당 데이터베이스 방언에 맞게 SQL 변환 작업을 해야한다.
이는 hibernate.dialect 속성에 지정해준다.
org.hibernate.dialect.MySQL5InnoDBDialect
org.hibernate.dialect.Oracle10gDialect
org.hibernate.dialect.H2Dialect
JPA를 시작하려면, 우선 EntityManagerFactory
를 생성해야 한다. 이 인스턴스를 통해 EntityManager
인스턴스를 생성한다.
EntityManagerFactory
는 하나만 생성해 애플리케이션 전체에서 공유한다. 또한 EntityManager
는 쓰레드 간에 공유하지 않는다.
그리고,
JPA 의 모든 데이터 변경은 트랜잭션 안에서 실행한다 !!
SQL
은 데이터베이스 테이블을 대상으로 쿼리한다면, JPQL
은 엔티티 객체를 대상으로 쿼리한다.