JPA
자바 애플리케이션에서 관계형 데이터베이스를 다룰 수 있는 표준 스팩이며, SQL 작성 없이 데이터 베이스와 매핑하고, 데이터의 저장, 조회, 갱신, 삭제를 처리합니다.
JPA는 인터페이스로만 구성되어 있으며, Hibernate, EclipseLink, OpenJPA 등 구현체가 필요합니다.
JPA 주요개념
Entity
DB 테이블에 매핑되는 클래스로서 @Entity 어노테이션을 사용합니다.
Persistence Context
엔티티 객체를 관리하는 컨텍스트, 엔티티의 생명 주기를 관리하며 1차 캐시 역할을 합니다.
EntityManager
엔티티를 생성, 조회, 갱신, 삭제하는 인터페이스이며, JPA의 핵심 API로, @PersistanceContext로 주입받습니다.
JPQL(Java Persistence Query Language)
SQL과 유사하지만 엔티티 객체를 대상으로 작성하는 쿼리입니다.
Transaction
DB 작업은 반드시 트랜잭션 안에서 실행됩니다. @Transactional 어노테이션을 통해 트랜잭션을 관리합니다.
JPA 생명주기
- 비영속(Transient)
엔티티가 EntityManager(1차 캐시)에 의해 관리되지 않는 상태, 예를 들어 new 키워드로 생성된 객체 - 영속(Persistent)
EntityManager에 의해 관리되고 있는 상태, 데이터베이스와 동기화 됨. - 준영속(Detached)
EntityManager가 더 이상 객체를 관리하지 않는 상태. 예를 들어 entityManager.clear() 호출 후 - 삭제(Removed)
데이터베이스에서 삭제된 상태. 예를 들어 entityManager.remove(user) 수행 이후
JPA 장점
생산성 향상, 유지보수 용이, 표준화
Spring Data JPA
Spring Boot 환경에서는 Spring Data JPA를 통해 JPA를 더욱 쉽게 사용할 수 있습니다.
- 기본 repository interface
JpaRepository 인터페이스를 확장하여 CRUD 메서드 제공
public interface UserRepository extends JpaRepository<User, Long>{
List<User> findByName(String name);
}
- @Query 어노테이션
JPQL이나 네이티브 쿼리를 직접 작성 가능
@Query("SELECT u FROM User u WHERE u.email = :email")
User findByEmail(@Param("email") String email);
'IT > Java' 카테고리의 다른 글
Spring Rest Controller, Spring MVC와 비교 (1) | 2024.12.02 |
---|---|
자바 Garbage Collector (1) | 2024.12.02 |
자바 객체의 생명주기 (0) | 2024.12.02 |
Spring Container가 관리하는 Bean에 대하여 (1) | 2024.12.02 |
Java, 배열의 조작을 도와주는 Arrays (0) | 2024.11.22 |