참조 문서 : https://docs.spring.io/spring-data/jpa/docs/1.10.1.RELEASE/reference/html/#query-by-example
Spring Data JPA - Reference Documentation
Example 11. Repository definitions using Domain Classes with mixed Annotations interface JpaPersonRepository extends Repository { … } interface MongoDBPersonRepository extends Repository { … } @Entity @Document public class Person { … } This example
docs.spring.io
JPA
- Java Persistence API ( JPA )는 Java 어플리케이션에서 관계형 데이터베이스를 다루기 위한 API
- JPA는 객체-관계 매핑( ORM )을 지원하여 객체 지향 프로그래밍과 관계형 데이터베이스 간의 매핑을 단순화 하고 표준화
주요 기능
- 객체-관계 매핑 (ORM)
- JPA는 관계형 데이터 베이스의 테이블과 Java 객체 간의 매핑을 단순화 하는 ORM 프레임워크
- 이를 통해 객체 모델과 DB 스키마 간의 간격을 줄여 개발자가 더 직관적으로 개발할 수 있게 함
- Entity
- JPA에서는 DB의 테이블을 대표하는 객체를 엔티티라고 합니다. 엔티티는 ' @Entity ' 어노테이션으로 표시하며, 일반적으로 DB의 각 레코드와 매핑
- EntityManager
- 엔티티의 영속성 관리를 위해 사용되는 인터페이스
- EntityManager는 엔티티의 생명주기를 관리하고 DB와의 트랜잭션을 처리
- JPQL( Java Persistence Query Language )
- JPA는 객체 지향 쿼리 언어인 JPQL을 제공, JPQL은 엔티티 객체를 대상으로 쿼리를 작성할 수 있도록 한다. SQL과 비슷하지만 엔티티와 속성을 대상으로 쿼리를 작성
- Entity Lifecycle(생명주기)
- Transient, Managed, Detached, Removed 등의 상태로 나뉜다.
- EntityManager를 통해 엔티티의 상태를 관리할 수 있습니다.
- 페치 전략(Fetch Strategy)
- 엔티티의 연관된 객체를 가져오는 전략을 결정하는데 사용
- 지연로딩과 즉시로딩이 있으며, 이를 통해 성능 최적화를 할 수 있음
- 트랜잭션 관리
- JPA는 DB 트랜잭션을 지원하여 DB작업을 안전하게 처리
- 엔티티 매니저를 사용하여 트랜잭션을 시작하고 커밋 또는 롤백하여 데이터의 일관성을 보장
더보기
Entity Lifecycle
- 엔티티는 다음과 같은 상태로 나뉜다.
- Transient(임시 상태) : 엔티티 객체가 생성되었지만, 영속성 컨텍스트에 저장하지 않은 상태를 말함, 일반적으로 ' new ' 키워드로 객체를 생성한 후에 해당 상태에 있음
- Managed(관리 상태) : 엔티티 객체가 영속성 컨텍스트에 관리되고 있는 상태, EntityManager를 사용하여 엔티티를 저장하거나 조회하면 해당 엔티티는 관리 상태가 됨
- Detached(분리 상태) : 영속성 컨텍스트에서 관리되지 않는 상태를 말함, 이는 트랜잭션을 종료하거나, EntityManager의 detach( ) 메서드를 호출하여 엔티티를 분리한 경우에 해당
- Removed(삭제 상태) : 엔티티가 영속성 컨텍스트에서 삭제되었지만, DB에는 아직 삭제되지 않은 상태, EntityManager의 remove( ) 메서드를 호출하여 엔티티를 삭제하면 해당 상태가 됨
- 엔티티의 생명주기
- 생성(Transient) : 엔티티 객체 생성
- 영속화(Managed) : EntityManager를 통해 엔티티를 저장하면 영속성 컨텍스트에 해당 엔티티가 관리되는 상태가 됨
- 변경 : 엔티티의 상태가 변경, 이 때 영속성 컨텍스트는 변경을 감지하고, 변경된 내용을 DB에 자동으로 반영
- 분리(Detached) : 영속성 컨텍스트에서 분리되거나, 트랜잭션이 종료도히면 엔티티가 분리 상태가 됨
- 삭제(Removed) : 엔티티가 영속성 컨텍스트에서 삭제되어 DB에서 삭제될 준비가 되면 삭제 상태가 됨
Transaction
- DB에서 한번에 수행되어야 하는 연산들의 논리적인 단위
- 트랜잭션이란 무엇인가?
- DB에서 여러 작업을 하나의 묶음으로 처리하는 것
- 예를 들어, 은행에서 돈을 이체할 때, 계좌에서 돈을 빼고 다른 계좌에 넣는 작업은 한 번에 처리되어야 한다. 이러한 작업들을 트랜잭션으로 묶어서 한 번에 실행하는 것이 트랜잭션의 개념
- 트랜잭션의 특징은 무엇인가?
- 트랜잭션은 ACID라는 특성을 가지고 있다.
- 원자성(Atomicity) : 트랜잭션은 하나의 단위로 처리되어야 하며, 모든 작업이 성공하거나 모든 작업이 롤백되어야 한다.
- 일관성(Consistency) : 트랜잭션 이전의 상태와 이후의 상태는 항상 일관되어야 한다.
- 격리성(Isolation) : 동시에 실행되는 다른 트랜잭션의 영향을 받지 않고, 각각 독립적으로 처리되어야 한다.
- 지속성(Durability) : 트랜잭션이 성공적으로 완료되면 결과는 영구적으로 저장되어야 한다.
- 트랜잭션은 ACID라는 특성을 가지고 있다.
엔티티 매니저
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPersistenceUnit");
EntityManager em = emf.createEntityManager();
// 엔티티 저장
em.getTransaction().begin();
em.persist(user);
em.getTransaction().commit();
// 엔티티 조회
User user = em.find(User.class, userId);
// 엔티티 업데이트
em.getTransaction().begin();
user.setUsername("newUsername");
em.getTransaction().commit();
// 엔티티 삭제
em.getTransaction().begin();
em.remove(user);
em.getTransaction().commit();
em.close();
emf.close();
JPQL
TypedQuery<User> query = em.createQuery("SELECT u FROM User u WHERE u.username = :username", User.class);
query.setParameter("username", "someUsername");
List<User> users = query.getResultList();
'Spring-boot' 카테고리의 다른 글
aws 키 페어 생성하기 (0) | 2024.04.19 |
---|---|
Spring-Boot Docker 배포. window (1) | 2024.04.19 |
@ManyToOne 관계 유형 (0) | 2024.03.15 |
Spring-boot URL 미리보기 (0) | 2024.03.12 |
Next.js와 Spring-boot 로컬 서버 통신하기 (0) | 2024.03.12 |