Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 스프링
- 웹 프로그래밍
- 메모리 관리
- 메모리의 불연속적 할당
- 문제풀이
- 스프링부트
- 프로세스 할당
- 리눅스
- 다단계 페이지 테이블
- Effective Access Time
- CS
- 자바 알고리즘
- spring
- jpa
- 2단계 Page Table
- Inverted Page Table
- linux
- 알고리즘
- 코드스테이츠 백엔드 과정 39기
- springboot
- 프로세스 불연속 할당
- 자바 문제풀이
- 웹개발
- Shared Page
- Segmentation with Paging
- Page Table의 구현
- 운영체제
- Allocation of Physical Memory
- 프로세스 동기화
- annotation
Archives
- Today
- Total
GrowMe
SpringBoot에서 JPA 사용하기 본문
JPA Repository
# JPA Repository
# build.gradle
# JPA 사용법
# JPA Repository 메소드
*JPA?
- Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음
- 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
- 인터페이스 이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현하게된다.
- SQL아닌 객체 중심으로 개발할 수 있다는 매우 큰 장점을 가지고 있다.
*JPA 사용법
1. build.gradle에 JPA dependency 추가하기
dependencies {
// JPA
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
- 스프링부트용 Spring Data Jpa 추상화 라이브러리
- 스프링 부트 버전에 맞춰 자동으로 JPA 관련 라이브러리들의 버전을 관리해준다.
2. JPA Entity 생성하기
@Getter
@NoArgsConstructor
@Entity
public class Posts extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length = 500, nullable = false)
private String title;
@Column(columnDefinition = "TEXT", nullable = false)
private String content;
private String author;
@Builder
public Posts(String title, String content, String author) {
this.title = title;
this.content = content;
this.author = author;
}
public void update(String title, String content) {
this.title = title;
this.content = content;
}
}
- Posts 클래스 : 실제 DB와 매칭될 클래스 (== Entity 클래스). 이 Entity 클래스의 수정을 통해, DB 작업이 진행된다.
- @Entity : 테이블과 링크될 클래스임을 나타냄.
클래스 이름 기반으로 테이블 이름 지정(SalesManager.java -> salesmanager table) - Id : 해당 테이블의 PK(Primary Key) 필드를 나타냄
- GeneragedValue : PK의 생성 규칙을 나타냄.
- Column : 테이블의 칼럼을 나타냄. 해당 클래스의 필드는 모두 칼럼이 된다.
기본값 외 변경할 옵션 있을 경우 주로 사용한다.
- Entity에 정의한 내용으로 테이블이 생성된다.
- CREATED_DATE와 MODIFIED_DATE 테이블은 상속받은 BaseTimeEntity에 의해 자동으로 생성된 것이다.
- BaseTimeEntity에 대해서는 추후 포스팅하여 링크를 남길 예정...
3. JPA Repository 만들기
package com.jojoIdu.book.springboot.domain.posts;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
// Posts를 DB에 접근시킬 Repository
public interface PostsRepository extends JpaRepository<Posts, Long> {
@Query("SELECT p FROM Posts p ORDER By p.id DESC")
List<Posts> findAllDesc();
}
- 인터페이스를 생성 후, JpaRepository<Entity 클래스, PK 타입>를 상속하면 기본적인 CRUD 메소드가 자동 생성된다.
- @Repository를 생략 가능하다. 단, Entity 클래스와 Entity Repository는 함께 위치해야 둘다 제 역할을 할 수 있다.
*JPA Repository 메소드 정리
- 기본 제공 메소드
메 소 드 | 기 능 |
save() | 레코드 저장 (insert, update) |
findOne() | primary key로 레코드 한건 찾기 |
findAll() | 전체 레코드 불러오기. 정렬(sort), 페이징(pageable) 가능 |
count() | 레코드 갯수 |
delete() | 레코드 삭제 |
- 메소드 추가하기
public interface MemberRepository extends JpaRepository<Member, Long> {
Member findByName(String name);
Page<Member> findByName(String name, Pageable pageable);
}
- 위와 같이 Query 메소드를 추가하여 스프링에게 알릴 수 있다.
- 그러기위해서는 규칙에 맞는 메서드를 작성해야 하는데, 그 규칙은 다음과 같다.
메소드명 | 설 명 |
findBy로 시작 | 쿼리를 요청하는 메서드 임을 알림 |
countBy로 시작 | 쿼리 결과 레코드 수를 요청하는 메서드 임을 알림 |
- 위의 findBy에 이어 해당 Entity 필드 이름을 입력하면 검색 쿼리를 실행한 결과를 전달한다.
- SQL의 where절을 메서드 이름을 통해 전달한다고 생각하면 된다.
- 메서드의 반환형이 Entity 객체이면 하나의 결과만을, 반환형이 List라면 쿼리에 해당하는 모든 객체를 전달한다.
- Query 메소드에 포함할 수 있는 키워드
메서드명 키워드 | 예시 | 설명 |
And | findByEmailAndUserId(String email, String userId) | 여러필드를 and 로 검색 |
Or | findByEmailOrUserId(String email, String userId) | 여러필드를 or 로 검색 |
Between | findByCreatedAtBetween(Date fromDate, Date toDate) | 필드의 두 값 사이에 있는 항목 검색 |
LessThan | findByAgeGraterThanEqual(int age) | 작은 항목 검색 |
GreaterThanEqual | findByAgeGraterThanEqual(int age) | 크거나 같은 항목 검색 |
Like | findByNameLike(String name) | like 검색 |
IsNull | findByJobIsNull() | null 인 항목 검색 |
In | findByJob(String … jobs) | 여러 값중에 하나인 항목 검색 |
OrderBy | findByEmailOrderByNameAsc(String email) | 검색 결과를 정렬하여 전달 |
좀 더 자세한 키워드와 쿼리를 보고 싶다면 아래 JPA 레퍼런스를 참조해보자.
'About Spring' 카테고리의 다른 글
[Spring] 이벤트를 처리하는 방법 (0) | 2022.07.12 |
---|---|
[JPA] 엔티티 간 연관관계 매핑 방법 (2) | 2022.07.12 |
[Spring] Mapper와 MapStruct에 대해 알아보자 (0) | 2022.06.28 |
[Spring] DTO의 개념과 그 활용 방법 (0) | 2022.06.27 |
[Spring]DI를 코드 + a로 쉽게 이해해보자 (0) | 2022.06.27 |
Comments