Java ORM 기술에 대한 표준 명세이다.
기존에 EJB에서 제공되던 엔터티 빈(Entity Bean)을 대체하는 기술이다.
Java 에서 제공을 한다. ( 스프링에서 제공해주는 것이 아니다)
Java 에서 제공을 하는 관계형 데이터 베이스를 사용하는 방식을 정의한 인터페이스이다
Jpa 는 특정한 기능을 하는 라이브러리가 아닌 인터페이스를 의미한다.
( 스프링에서 표준 인터페이스를 정의하는데 ORM을 사용하기 위해서 만든 인터페이스가 JPA 이다)
ORM 때문에 Java Class에서 DB Table 을 매핑 시킨다.
객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것
객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.
JPQL 관계형 데이터베이스에 저장된 엔티티에 대한 쿼리들을 작성한다.
쿼리들은 구문에서 SQL 쿼리와 유사하지만, 데이터베이스 테이블에 직접적으로 처리하지 않고 엔티티 개체에 대하여 처리된다.
Criteria 쿼리는 JPQL을 자바 코드로 작성하도록 도와주는 빌더 클래스 API이다.
Criteria를 사용하면 문자가 아닌 코드로 JPQL를 작성하므로 문법 오류를 컴파일 단계에서 잡을 수 있고 문자 기반의 JPQL보다 동적 쿼리를 안전하게 생성할 수 있다.
Criteria를 사용해서 개발하다보면 코드가 복잡하고 장황하며 직관적으로 이해하기 힘들다는 단점
Querydsl 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 프레임워크다.
문자열로 작성하거나 XML 파일에 쿼리를 작성하는 대신, Querydsl이 제공하는 플루언트(Fluent) API를 이용해서 쿼리를 생성할 수 있다.
일반적으로 사용하는 SQL 구문을 의미 ( Inert , Select , Delelet , Update )를 의미한다.