Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
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 more
Archives
Today
Total
관리 메뉴

요리사에서 IT개발자로

스파르타 코딩클럽 JPA 심화 JPARepository 기능 본문

Spring

스파르타 코딩클럽 JPA 심화 JPARepository 기능

H.S-Backend 2024. 6. 27. 20:55

SpringData Common의

CRUDRepository + PagingAndSortingRepository 의 쿼리 기능을 제공한다.


Repository에서 JPARepository까지

@NotRepositoryBean이 붙어 있는 인터페이스이다.

 

 

JpaRepository<Entity, Id> 를 extends하면 알맞게 프로그래밍된

SimpleJpaRepository 구현체 빈이 등록된다.

 

main클래스에 @SpringBootApplication을 통해서 자동으로 붙여지는 

@EnableJpaRepositories의 JpaRepsitoriesRegister를 통해서 등록된다.

SpringDataJpa에 의해서 Entity의 CRUD, 페이징, 정렬 기능 메소스들을 가진 Bean이 등록된다.


JpaRepository 쿼리 사용방법

프로그래밍되어 제공되는 쿼리명 규칙

{접두어}{도입부}By{프로퍼티 표현식}{조건식}[(And || Or){프로퍼티 표현식}(조건식)](OrderBy{프로퍼티}ASC || DESC) (매개변수)

규칙 메소드
접두어 Find, Get, Query, Count, ...
도입부 Distinct, First(N), Top(N)
프로퍼티 표현식 Person.Address.ZipCode => find(Person)ByAddress_ZipCode(...)
조건식 IgnoreCase, Between, LessThan, GreaterThan, Like, Contains, ...
정렬 조건 OrderBy{프로퍼티}Asc
리턴 타입 E, Optional<E>, List<E>, Page<E>, Slice<E>, Stream<E>
매개변수 Pageable, Sort

 

중복 제거

findDistinctUserByNameOrPassword(String name, String password)

이름 또는 비밀번호가 중복되지 않은 사용자를 찾다.

 

findUserDistinctByNameOrPassword(String name, String password)

이름 또는 비밀번호가 일치하는 사용자를 찾다.

 

대소문자 무시

findByNameIgnoreCase(String name)

이름의 대소문자를 무시하고 사용자를 찾다.

findByNameAndPasswordAllIgnoreCase(String name, String password)

이름과 비밀번호 모두 대소문자를 무시하고 사용차를 찾다.

 

정렬

findByNameOrderByNameAsc(String name)

이름 기준 이름의 오름차순으로 찾다. (오래된순으로)

findByNameOrderByNameDesc(String name)

이름 기준 이름의 내림차순으로 찾다.(최신순으로)

 

페이징

Page<User> findByName(String name, Pageable pageable) 

주어진 페이지 정보에 따라 이름이 일치하는 사용자를 찾다.

Slice<User> findByname(String name, Pageable pageable)

주어진 페이지 정보에 따라 이름이 일치하는 사용자를 찾다.

 

Page와 Slice는 같은 메서드를 제공하지만 

 

Page는

전체 데이터에 대한 상세한 정보를 제공하고

Slice는

더 경량화 된 방식으로 페이지네이션된 결과를 반환한다.

 

Page는 해당 페이지 에서 해당 사용자를 존재할 것인지
Slice는 해당 스크롤 내에서 해당 사용자를 존재할 것인지

 

페이지는 한정되있지만 스크롤은 계속 내릴 수 있다.(차이점)


List<User> findByName(String name, Sort sort)

주어진 사용자와 일치하는 사용자를 찾아서 sort에 정의된 (Asc, Desc)방식에 따라 정렬된 리스트로 반환한다.

List<User> findByName(String name, Pageable pagealbe)

주어진 페이지에 일치하는 사용자들을 찾아서 반환한다.


Stream<User> readAllByNameNotNull() 

데이터 베이스에서 이름이 null이 아닌 모든 사용자를 반환한다.(회사에서 사용금지)

 

https://hs-backend.tistory.com/209

 

스파르타 코딩클럽 JPA 심화 트랜잭션

트랜잭션이란 데이터 베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위데이터들을 생성 조회 수정 삭제 후 최종 결과물을 만들 때 까지의 하나의 작업을 트랜잭션으로 관리할 수 있다.

hs-backend.tistory.com

반응형