JPA : Java Persistence API
2023. 11. 15. 22:16ㆍ백엔드/Spring Boot
ORM (Object Relational Mapping)
: 객체와 관계형 데이터베이스 간의 매핑을 자동화하는 프로그래밍 기술이나 기술 집합이다.
Ex. Hibernate, EclipseLink, MyBatis
JPA
: JPA는 자바 진영의 ORM(Object-Relational Mapping)의 기술 표준으로 사용하는 인터페이스의 모음으로 JPA를 사용하면 객체지향 프로그래밍의 이점을 살리면서 DB와의 통합을 효율적으로 할 수 있다.
JPA 특징
1. 애노테이션 기반 매핑
: 어노테이션을 사용하여 객체와 DB간의 정보를 매핑 정보를 지정하여 복잡한 쿼리를 작성하지 않고도 DB 연동을 수행할 수 있다.
@Entity
@Table(name = "employees")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "employee_name")
private String name;
// ... 다른 필드 및 메서드들
}
2. JPQL (Java Persistence Query Language)
: 객체 지향적인 쿼리 언어인 JPQL을 제공하여 데이터베이스에 대한 객체 기반의 쿼리를 작성할 수 있다.
TypedQuery<Employee> query = entityManager.createQuery(
"SELECT e FROM Employee e WHERE e.department = :dept", Employee.class);
query.setParameter("dept", desiredDepartment);
List<Employee> result = query.getResultList();
3. Entity Manager
: 엔티티 매니저는 트랜잭션을 관리하고 영속성 컨텍스트를 제공하여 객체의 상태를 추적하며 엔티티의 생명주기를 관리한다.
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
Employee newEmployee = new Employee();
newEmployee.setName("John Doe");
entityManager.persist(newEmployee);
entityManager.getTransaction().commit();
entityManager.close();
4. 데이터베이스 독립성 유지
- JPA는 객체 지향적인 방식으로 DB와 상호작용하도록 개발되어 있어 데이터베이스 종속성을 낮추고 여러 종류의 데이터베이스에 대해 동일한 코드를 사용할 수 있도록 한다.
- 플랫폼간의 이식성을 높여주고 다른 데이터베이스 시스템으로 전환할 때 유연하게 대처할 수 있다.
5. 복잡한 쿼리를 작성하기 어려움
: JPQL은 객체 지향 쿼리 언어이지만, 복잡한 쿼리를 작성하기 위해서는 SQL에 비해 다소 복잡한 문법을 사용해야 한다.
특히 복잡한 조인이나 집계 함수와 같은 경우에는 난이도가 올라갈 수 있다.
'백엔드 > Spring Boot' 카테고리의 다른 글
DTO ↔ Entity 변환하기 (1) | 2023.11.16 |
---|---|
JPA - Entity 생성을 위한 어노테이션 (0) | 2023.11.15 |
Entity vs DTO vs VO 개념과 특징 (1) | 2023.11.08 |
Controller,Service,Repository에서의 DI (0) | 2023.11.05 |
스프링 빈(Bean) 이란? (0) | 2023.11.05 |