우노
[Kotlin] ORM, JPA, Spring Data JPA 본문
구성 요소 요약
JPA (Java Persistence API)
├── ORM (Object-Relational Mapping)
│ └── Entity
├── Spring Data JPA
│ └── Repository
│ ├── JpaRepository
│ └── CrudRepository
- JPA : ORM을 Java에서 쉽게 사용할 수 있도록 정의한 표준 API입니다.
- ORM : 객체와 데이터베이스 간 매핑을 처리하는 기술입니다.
- Entity : 데이터베이스의 테이블과 매핑되는 자바 객체입니다.
- Spring Data JPA : JPA를 쉽게 사용할 수 있도록 도와주는 Spring 모듈입니다.
- Repository : 데이터베이스에 접근하기 위한 인터페이스입니다.
- JpaRepository : 기본적인 CRUD 기능뿐만 아니라 페이징, 정렬, 쿼리 메소드 등을 지원하는 기능이 추가된 인터페이스입니다.
- CrudRepository : 가장 기본적인 CRUD 기능(생성, 읽기, 수정, 삭제)을 제공하는 인터페이스입니다.
- Repository : 데이터베이스에 접근하기 위한 인터페이스입니다.
- ORM : 객체와 데이터베이스 간 매핑을 처리하는 기술입니다.
Entity
목적: 데이터베이스 테이블과 매핑되는 자바 객체입니다.
특징: @Entity 어노테이션을 사용하여 데이터베이스 테이블을 자바 클래스와 연결합니다.
예제
@Entity public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Double price; // Getters, Setters }
ORM (Object-Relational Mapping)
목적: 데이터베이스와 객체(Entity) 간의 매핑을 관리하는 기술입니다.
장점: SQL을 직접 작성하지 않고 객체 지향적으로 데이터베이스 작업을 처리할 수 있어 생산성과 유지보수성을 높입니다.
예제
@Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // Getters, Setters }
JPA (Java Persistence API)
- 목적: Java에서 ORM(Object-Relational Mapping)을 사용하기 위한 표준 API입니다.
- 기능:
- Entity 매핑: 객체와 데이터베이스 테이블 간의 매핑을 제공합니다.
- 영속성 컨텍스트 관리: 엔티티 상태를 관리하여, 데이터의 생명 주기를 처리합니다.
- JPQL (Java Persistence Query Language): 객체지향적 쿼리 언어를 사용하여 데이터를 조회합니다.
- 트랜잭션 관리: 데이터 작업의 원자성 보장합니다.
- 필수 구현체: JPA는 표준 API이므로 Hibernate, EclipseLink, DataNucleus와 같은 구현체가 필요합니다.
Spring Data JPA
- 목적: JPA를 쉽게 사용할 수 있도록 돕는 Spring 모듈입니다. JPA를 사용한 데이터 접근을 더 간편하게 구현할 수 있게 해줍니다.
- 기능:
- 자동 구현: 인터페이스에서 JpaRepository를 상속받으면 기본적인 CRUD 작업이 자동으로 제공됩니다.
- 쿼리 메소드: 메서드 이름으로 쿼리를 생성할 수 있습니다. 예: findByName(String name)
- 페이징 및 정렬 지원: PagingAndSortingRepository로 페이징과 정렬 기능을 제공합니다.
- 커스텀 쿼리: @Query 어노테이션으로 복잡한 쿼리를 정의할 수 있습니다.
Repository
- 목적: 데이터베이스에 접근하기 위한 인터페이스로, CRUD (Create, Read, Update, Delete) 및 쿼리 메소드 등을 제공합니다.
- Spring Data JPA의 주요 인터페이스:
- JpaRepository: 기본적인 CRUD 기능과 더불어 페이징, 정렬, 쿼리 메소드 기능을 제공합니다.
- CrudRepository: 기본적인 CRUD 기능만 제공합니다.
JpaRepository
목적: Spring Data JPA에서 데이터베이스 작업을 더 간편하게 처리할 수 있도록 돕는 인터페이스입니다.
특징:
- 기본적인 CRUD 기능과 페이징, 정렬, 쿼리 메소드 기능을 제공합니다.
- 개발자가 직접 구현하지 않고, Spring Data JPA가 자동으로 구현해줍니다.
기본적인 CRUD 제공:
- save() : 엔티티 저장
- findById() : ID로 엔티티 조회
- findAll() : 모든 엔티티 조회
- delete() : 엔티티 삭제
메서드 이름에 따른 자동 쿼리 생성:
- 예를 들어, findByName(String name) 메서드를 작성하면 name 필드를 기준으로 데이터를 조회하는 쿼리가 자동으로 생성됩니다.
JpaRepository 예시
public interface UserRepository extends JpaRepository<User, Long> { // name 필드를 기준으로 데이터를 조회하는 쿼리가 자동으로 생성됩니다. List<User> findByName(String name); }
- 위 예시에서 UserRepository는 JpaRepository를 상속받아 User 엔티티에 대한 CRUD 작업을 자동으로 제공합니다.
- findByName 메서드는 name 필드를 기준으로 자동으로 쿼리를 생성하여 데이터를 조회합니다.
'Web_App > Kotlin' 카테고리의 다른 글
[Kotlin] Controller와 Service의 계층 구조 (0) | 2024.12.20 |
---|---|
[Kotlin] @SqlResultSetMapping (0) | 2024.12.20 |
[Kotlin] @Entity와 @Repository (0) | 2024.12.18 |
[Kotlin] DTO와 Entity의 관계 (0) | 2024.12.17 |
[Kotlin] @Scheduled 란? (0) | 2024.12.02 |
Comments