1 QueryDSL 소개
- JPQL을 코드로 작성할 수 있도록 도와주는 빌더 API
- JPA 크리테리아에 비해서 편리하고 실용적임
- 쿼리를 문자가 아닌 코드로 작성해도, 쉽고 간결하며 그 모양도 쿼리와 비슷하게 개발 할 수 있는 프로젝트가 바로 QueryDSL 이다.
오픈소스
오픈소스
JPQL(Java Persistence Query Language) : 엔티티 객체를 조회하는 객체지향 쿼리.
복합값 정의 : @Embeddable 어노테이션으로 정의
엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다.
JPA는 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 제공하는데 이것을 지연 로딩이라 한다.
지연 로딩 기능을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데 이것을 프록시 객체라 한다.
고려할건 크게 3가지다.
다중성 : 두 엔티티의 연관관계를 나타냄 (예: 일대다,다대일,일대일,다대다) 다중성을 판단하기 힘들땐 반대방향을 생각하면 됨 (일대다의 반대는 다대일)
다대다(@ManyToMany)
@Entity(클래스) : 테이블과 매핑할 클래스, JPA가 관리함
@Table(클래스) : 엔티티와 매핑할 테이블 (생략시 엔티티명으로 적용)
@Column(필드) : 칼럼을 매핑한다.
트랜잭션 커밋 하는 순간 DB 반영힘 이를 플러시(flush)라 함
하이버네이트 오픈소스 ORM 프레임워크가 나온 후 자바빈이 버려지고 하이버네이트, 이클립스링크등의 ORM 프레임워크로 자바 ORM 표준을 정한것이 JPA 이다.
JPA(Java Persistent API) : 관계형 데이터베이스에 접근하기 위한 표준 ORM 기술을 제공하며, 기존에 EJB에서 제공되던 엔터티 빈(Entity Bean)을 대체하는 기술이다. JPA는 JSR 220에서 정의된 EJB 3.0 스펙의 일부로 정의가 되어 있지만, JPA는 EJB 컨테이너에 의존하지 않으며 EJB, 웹 모듈 및 Java SE 클라이언트에서 모두 사용이 가능하다. 또한, JPA는 사용자가 원하는 퍼시스턴스 프로바이더 구현체를 선택해서 사용할 수 있다.
ORM(Object Relational Mapping) : 관계형 데이터베이스를 객체에 매핑.
왜 JPA를 사용해야 하는가?