Spring Boot JPA(Java Persistence API)는 자바 애플리케이션에서 데이터베이스와 객체 간의 매핑을 쉽게 할 수 있도록 도와주는 ORM(Object Relational Mapping) 도구입니다. 주로 Spring Data JPA라는 스프링 모듈을 사용하여 JPA를 더욱 편리하게 활용할 수 있습니다. 여기서 JPA는 인터페이스이며, 구체적인 구현체로는 Hibernate가 많이 사용됩니다.
주요 개념과 기능
1. 엔티티(Entity)
- 엔티티는 데이터베이스의 테이블과 매핑되는 클래스입니다. JPA에서는 각 클래스가 데이터베이스의 테이블로 매핑되고, 클래스의 필드는 테이블의 컬럼으로 매핑됩니다.
- 예를 들어, @Entity 어노테이션을 사용하여 특정 클래스를 엔티티로 선언하고, @Id 어노테이션으로 기본 키를 지정합니다.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// getters and setters
}
2. 레포지토리(Repository)
- 레포지토리는 데이터베이스에 접근하는 메서드를 정의하는 인터페이스입니다. Spring Data JPA에서는 인터페이스만 선언해도 CRUD 작업을 위한 메서드를 자동으로 제공해줍니다.
- JpaRepository 인터페이스를 상속받으면 기본적인 CRUD 기능을 사용할 수 있으며, 커스텀 쿼리도 메서드 이름으로 선언할 수 있습니다.
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByName(String name);
}
3. 쿼리 메서드(Query Method)
- JPA는 메서드 이름으로 쿼리를 자동 생성해주는 기능을 제공합니다. findBy, deleteBy, countBy와 같은 키워드를 사용해 쿼리를 작성할 수 있습니다.
- 예를 들어, findByName은 이름에 따라 유저를 찾는 쿼리를 자동으로 생성합니다.
4. 트랜잭션(Transaction) 관리
- JPA는 데이터베이스와의 모든 상호작용을 트랜잭션 단위로 수행합니다. @Transactional 어노테이션을 사용하여 트랜잭션을 적용할 수 있습니다.
@Transactional
public void updateUserEmail(Long id, String email) {
User user = userRepository.findById(id).orElseThrow();
user.setEmail(email);
userRepository.save(user);
}
5. JPQL(Java Persistence Query Language)
- JPQL은 엔티티 객체를 대상으로 하는 쿼리 언어입니다. 데이터베이스의 테이블을 직접 다루는 SQL과 달리, JPA는 객체 모델을 기반으로 쿼리를 작성합니다.
@Query("SELECT u FROM User u WHERE u.name = :name")
List<User> findUserByName(@Param("name") String name);
장점
- 생산성: 데이터베이스와의 상호작용을 위한 기본적인 CRUD 기능을 자동으로 제공해 코드 작성량을 줄입니다.
- 유연성: 특정 데이터베이스에 종속되지 않으면서도 객체 중심의 데이터 접근이 가능합니다.
- 유지보수성: 쿼리를 메서드 이름으로 간단히 선언할 수 있어 코드의 가독성과 유지보수성이 높아집니다.
'Spring > Spring JPA' 카테고리의 다른 글
[JPA] ENUM 타입 (0) | 2024.11.12 |
---|---|
[JPA] 엔티티 클래스에서 많이 사용되는 어노테이션 (1) | 2024.11.12 |
[JPA] Paging (1) | 2024.11.12 |
[JPA] IsEmpty와 IsNotNulLL 의 차이점 (0) | 2024.11.11 |
Query by Example(QBE) (0) | 2024.11.11 |