일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- tutorial
- querydsl
- ChatGPT
- SQL
- Practice
- 이더리움
- 실습
- OpenAI
- 블록체인실습
- ORM
- 프로그래밍
- 코딩
- springboot
- Ai
- node.js
- 데이터베이스
- 웹개발
- 머신러닝
- seaborn
- Python
- 블록체인
- java
- SpringDataJpa
- 파이썬
- 데이터 시각화
- 암호화폐
- JPA
- 데이터 분석
- 딥러닝
- 스마트컨트랙트
- Today
- Total
집돌이 공대남 IT
JPA 프로그래밍 마스터하기: 초급부터 전문가까지 실습을 통한 학습(9) 본문
JPA로 다루는 고급 기능
안녕하세요! 집돌이공대남입니다!
이전 포스트에서는 JPA의 기본적인 사용법과 CRUD 연산을 실습해봤습니다.
이번 포스트에서는 JPA의 고급 기능인 연관 관계 매핑, 쿼리 메서드, 페이징 처리 등에 대해 알아보도록 하겠습니다.
1. 연관 관계 매핑
객체 지향 프로그래밍에서는 객체 간의 관계를 표현하기 위해 연관 관계를 사용합니다. JPA에서도 이러한 연관 관계를 지원하며, 이를 통해 객체 간의 관계를 쉽게 표현할 수 있습니다.
가장 기본적인 연관 관계인 단방향 연관 관계를 예로 들어보겠습니다. 아래 예제에서 Order
클래스는 User
클래스에 대한 참조를 가지며, 이를 통해 Order
와 User
사이에 연관 관계를 맺습니다.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// getters and setters
}
@Entity
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
// getters and setters
}
@ManyToOne
어노테이션은 Order
객체가 User
객체와 N:1 관계임을 표현하며, @JoinColumn
어노테이션은 이 관계가 user_id
라는 컬럼을 통해 연결됨을 나타냅니다.
2. 쿼리 메서드
Spring Data JPA는 메서드 이름으로 쿼리를 생성하는 기능을 제공합니다. 이를 쿼리 메서드라고 하며, 이를 통해 개발자는 SQL 쿼리를 직접 작성하지 않고도 필요한 쿼리를 생성할 수 있습니다.
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByName(String name);
}
위의 예제에서 findByName
메서드는 name
이 주어진 값과 일치하는 User
객체들을 조회하는 쿼리를 생성합니다.
3. 페이징 처리
데이터가 많을 때 모든 데이터를 한 번에 조회하는 것은 부하를 발생시킬 수 있습니다. 이럴 때 페이징 처리를 통해 일정량의 데이터만 조회하도록 할 수 있습니다. Spring Data JPA는 페이징 처리를 위한 Pageable
인터페이스를 제공합니다.
public interface UserRepository extends JpaRepository<User, Long> {
Page<User> findAll(Pageable pageable);
}
findAll
메서드에 Pageable
객체를 전달하여 페이징 처리된 결과를 받을 수 있습니다. Pageable
객체는 PageRequest
클래스를 통해 생성할 수 있으며, 조회할 페이지와 페이지 크기를 지정할 수 있습니다.
Pageable pageable = PageRequest.of(0, 10); // 첫 번째 페이지, 페이지당 10개
Page<User> page = userRepository.findAll(pageable);
이렇게 JPA는 연관 관계 매핑, 쿼리 메서드, 페이징 처리 등의 고급 기능을 제공하여 개발자가 데이터를 보다 편리하게 다룰 수 있도록 도와줍니다. 다음 포스트에서는 JPA의 성능 최적화 방법에 대해 알아보도록 하겠습니다.
다음 시간에 뵙겠습니다!
'IT > 웹개발' 카테고리의 다른 글
JPA 프로그래밍 마스터하기: 초급부터 전문가까지 실습을 통한 학습(11) (0) | 2023.08.24 |
---|---|
JPA 프로그래밍 마스터하기: 초급부터 전문가까지 실습을 통한 학습(10) (0) | 2023.08.23 |
JPA 프로그래밍 마스터하기: 초급부터 전문가까지 실습을 통한 학습(8) (0) | 2023.08.21 |
JPA 프로그래밍 마스터하기: 초급부터 전문가까지 실습을 통한 학습(7) (0) | 2023.08.20 |
JPA 프로그래밍 마스터하기: 초급부터 전문가까지 실습을 통한 학습(6) (0) | 2023.08.19 |