아라보자.
JPA는 자바 애플리케이션에서 관계형 데이터베이스와 상호작용하기 위한 자바 표준 ORM (Object-Relational Mapping) API입니다. JPA는 자바 객체를 데이터베이스 테이블에 매핑하고, 데이터베이스의 데이터를 객체로 변환하는 기능을 제공합니다.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// Getters and setters
}
여기서 @Id는 PK에 쓰이고
@GeneratedValue(strategy = GenerationType.IDENTITY)는
Auto_increment와 같다고 알고 있으면 되겠다.
Hibernate는 JPA의 구현체 중 하나로, 가장 널리 사용되는 ORM 프레임워크입니다. Hibernate는 JPA의 모든 기능을 제공하면서도 자체적으로 확장된 기능도 제공합니다.
구현체는 쉽게 말해서 인터페이스나 추상 클래스에서 정의된 메서드를 실제로 동작하도록 구체적으로 작성한 클래스를 말해요.
주요 기능
JPQL은 JPA에서 제공하는 객체지향 쿼리 언어로, SQL과 비슷하지만 엔티티 객체를 대상으로 질의를 작성합니다.
주요 특징
엔티티 객체를 대상으로 질의.엔티티 클래스와 그 필드를 사용.예제 코드
String jpql = "SELECT u FROM User u WHERE u.name = :name";
TypedQuery<User> query = entityManager.createQuery(jpql, User.class);
query.setParameter("name", "John Doe");
List<User> users = query.getResultList();
여기서 TypedQuery와 Query의 차이점도 알아볼게요.
Spring Data JPA는 JPA를 보다 쉽게 사용할 수 있도록 도와주는 스프링의 서브 프로젝트입니다. 리포지토리 패턴을 사용하여 데이터 접근 계층을 단순화하고, CRUD 작업을 자동으로 생성해줍니다.
주요 기능
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByName(String name);
}
QueryDSL은 타입 안전한 쿼리 언어로, JPQL이나 SQL 쿼리를 자바 코드로 작성할 수 있게 해줍니다. 컴파일 시점에 쿼리의 오류를 잡아줄 수 있어 더욱 안전하게 쿼리를 작성할 수 있습니다.
예제 코드
QUser user = QUser.user;
List<User> users = new JPAQuery<>(entityManager)
.select(user)
.from(user)
.where(user.name.eq("John Doe"))
.fetch();
여기서 QueryDsl Qclass가 나오는데
이 친구는 엔티티 클래스의 확장이라고 생각하면 쉽다.
엔티티가 테이블의 매핑을 담당하고, QClass는 쿼리 작성 시 편의성을 제공해준다.
가장 큰 장점은 역시 컴파일 단계에서 에러를 잡을 수 있다는 것이다.
JPQL은 런타임 시점에 에러가 확인되니..
요약하자면