JPA(Java Persistence API)

 

JPA(Java Persistence API)는 자바 애플리케이션에서 데이터베이스와의 상호작용을 위한 표준 API입니다.

JPA는 객체-관계 매핑(Object-Relational Mapping, ORM)을 기반으로 하여 객체 지향 도메인 모델과 관계형 데이터베이스 간의 불일치를 해결하고, 데이터 액세스 로직을 단순화합니다.

 

1. JPA 주요 개념

  • 엔티티(Entity): 데이터베이스의 테이블과 매핑되는 자바 클래스입니다.
  • 엔티티 매니저(EntityManager): 엔티티의 생성, 수정, 삭제 등의 작업을 수행하는 주요 인터페이스입니다.
  • 영속성 컨텍스트(Persistence Context): 엔티티 객체를 관리하는 메모리 공간입니다.
  • JPQL(Java Persistence Query Language): 데이터베이스에 대한 쿼리를 작성하기 위한 객체 지향 쿼리 언어입니다.

 

2. JPA 구현체

JPA는 명세일 뿐, 실제 구현은 별도의 라이브러리를 통해 이루어집니다. 대표적인 JPA 구현체로는 다음과 같은 것들이 있습니다.

  • Hibernate: 가장 널리 사용되는 JPA 구현체로, 강력한 기능과 성능을 제공합니다.
  • EclipseLink: Eclipse Foundation에서 개발한 오픈 소스 JPA 구현체입니다.
  • Apache OpenJPA: Apache Software Foundation에서 개발한 오픈 소스 JPA 구현체입니다.

 

3. JPA 어노테이션

JPA는 어노테이션을 사용하여 엔티티 클래스와 데이터베이스 테이블 간의 매핑을 정의합니다. 주요 어노테이션은 다음과 같습니다.

  • @Entity: 클래스가 엔티티임을 나타냅니다.
  • @Table: 엔티티와 매핑될 데이터베이스 테이블을 지정합니다.
  • @Id: 엔티티의 기본 키를 나타냅니다.
  • @GeneratedValue: 기본 키 생성 전략을 지정합니다.
  • @Column: 필드와 데이터베이스 컬럼 간의 매핑을 정의합니다.
  • @OneToOne, @OneToMany, @ManyToOne, @ManyToMany: 엔티티 간의 관계를 정의합니다.

 

4. JPA 예제

다음은 JPA를 사용하여 간단한 엔티티 클래스를 정의하고 데이터베이스 작업을 수행하는 예제입니다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@Entity
@Table(name = “users”)
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(nullable = false)
    private String name;
    @Column(nullable = false, unique = true)
    private String email;
    // Getters and Setters
}
public class UserService {
    @PersistenceContext
    private EntityManager entityManager;
    public void createUser(User user) {
        entityManager.persist(user);
    }
    public User findUserById(Long id) {
        return entityManager.find(User.class, id);
    }
    public void updateUser(User user) {
        entityManager.merge(user);
    }
    public void deleteUser(User user) {
        entityManager.remove(user);
    }
}
cs

 

위 예제에서는 User 엔티티 클래스를 정의하고, @Entity, @Table, @Id, @GeneratedValue, @Column 어노테이션을 사용하여 데이터베이스 테이블과의 매핑을 설정하였습니다.

UserService 클래스에서는 EntityManager를 주입받아 엔티티의 생성, 조회, 수정, 삭제 작업을 수행하였습니다.

JPA를 사용하면 데이터베이스와의 상호작용을 객체 지향적으로 처리할 수 있으며, 데이터 액세스 로직을 간소화할 수 있습니다.

또한 JPA는 다양한 데이터베이스를 지원하므로, 데이터베이스 변경 시에도 애플리케이션 코드의 수정을 최소화할 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다