일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- index
- 스위트라떼
- 장범준
- 아이유
- 핑거스타일
- 레이디스코드
- oracle
- 신입
- I'm fine thank you
- Inside Of Me
- 러블리즈
- 오라클 아키텍처
- 슬픔의 후에
- 천공의 시간
- 개발자
- 봄 사랑 벚꽃 말고
- 니가 참 좋아
- 기타
- nginx
- SQL 처리
- IT
- DBMS 구성요소
- 데이터베이스
- 인덱스
- 6학년 8반 1분단
- 오라클
- db
- 말 더듬
- DBMS
- 악보
취미로 음악을 하는 개발자
[Spring Framework] 쿼리 메소드 (2) 본문
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package org.zerock.persistence; import java.util.Collection; import java.util.List; import org.springframework.data.repository.CrudRepository; import org.zerock.domain.Board; public interface BoardRepository extends CrudRepository<Board, Long>{ public List<Board> findBoardByTitle(String title); public Collection<Board> findByWriter(String writer); // 작성자에 대한 Like % 키워드 % public Collection<Board> findByWriterContaining(String writer); // Or 조건의 처리 public Collection<Board> findByTitleContainingOrContentContaining( String title, String content); // Title Like % ? % and Bno > ? public Collection<Board> findByTitleContainingAndBnoGreaterThan( String keyword, Long num); // Bno > ? Order by bno Desc public Collection<Board> findByBnoGreaterThanOrderByBnoDesc(Long bno); } | cs |
findBy를 이용한 특정 컬럼 처리
SQL문에서 특정한 컬럼의 값을 조회할 때는 쿼리 메소드의 이름을 findBy로 시작하는 방식을 이용한다.
Collection<T> findBy + 속성 이름(속성 타입)
public Collection<Board> findByWriter(String writer);
findBy.. 로 시작하는 쿼리 메소드는 지정하는 속성의 값에 따라 파라미터의 타입이 결정된다. Board 클래스에서 writer 속성의 값이 문자열이기 때문에 파라미터 타입은 String으로 지정한다. findBy.. 로 시작하는 쿼리 메소드의 리턴 타입은 Collection으로 설계하면 되기 때문에 forEach 구문을 이용해서 데이터를 출력하면 다음과 같은 형태가 된다.
1 2 3 4 5 | @Test public void testByWriter() { Collection<Board> results = repo.findByWriter("user00"); results.forEach(board -> System.out.println(board)); } | cs |
Board 클래스가 가리키는 테이블에서 작성자 이름이 "user00"인 컬럼들을 조회한 것이다.
like 구문 처리
findBy와 더불어 가장 많이 사용하는 구문으로, like에 대한 처리는 아래와 같은 형태로 사용한다.
형태 |
쿼리 메소드 |
단순 like |
Like |
키워드 + '%' |
StartingWith |
'%' + 키워드 |
EndingWith |
'%' + 키워드 + '%' |
Containing |
1 2 3 4 5 6 | @Test public void testByWriterContaining() { Collection<Board> results = repo.findByWriterContaining("05"); // for 루프 대신 forEach results.forEach(board -> System.out.println(board)); } | cs |
Board 클래스가 가리키는 테이블에서 작성자 이름에 "05"가 들어있는 컬럼을 조회한 것이다.
아래는 Hibernate 출력에서 like가 사용된 것을 알 수 있는 부분과 조회된 컬럼 리스트이다.
and 혹은 or 조건 처리
경우에 따라 2개 이상의 속성을 이용해서 엔티티들을 검색해야 할 때가 있다. 이 경우를 위해 쿼리 메소드에는 'And'와 'Or'를 사용한다. 다만, 속성이 두 개 이상일 때는 파라미터 역시 지정한 속성의 수만큼 맞춰줘야 한다.
title과 content 속성에 특정한 문자열로 조회하는 코드로, findBy + TitleContaining + Or + ContentContaining 과 같은 형태가 된다. title과 content에 대한 코드이므로 파라미터 역시 두 개인 것을 알 수 있다.
부등호 처리
쿼리 메소드에서는 '<'와 '>' 같은 부등호는 'GreaterThan', 'LessThan'을 이용해서 처리할 수 있다.
title에 특정한 문자가 포함되어 있고 bno가 특정 숫자 이상인 데이터를 조회하고 싶을 때, 아래와 같은 형태가 된다.
1 2 3 4 5 | @Test public void testByTitleAndBno() { Collection<Board> results = repo.findByTitleContainingAndBnoGreaterThan("5", 50L); results.forEach(board -> System.out.println(board)); } | cs |
위의 코드는 title에 5가 포함되고 번호가 50보다 큰 데이터를 조회하는 것이다.
Order by 처리
가져오는 데이터의 순서를 지정하기 위해서는 OrderBy + 속성 + Asc or Desc 를 이용한다.
bno가 특정 번호보다 큰 컬럼을 bno 값의 역순으로 처리하고 싶다면 아래와 같다.
1 2 3 4 5 | @Test public void testBnoOrderBy() { Collection<Board> results = repo.findByBnoGreaterThanOrderByBnoDesc(90L); results.forEach(board -> System.out.println(board)); } | cs |
bno가 90보다 큰 컬럼을 내림차순으로 조회한다.
'공대인 > Spring[Boot]' 카테고리의 다른 글
[Spring Framework] 쿼리 메소드 (3) (0) | 2019.10.06 |
---|---|
[Spring Framework] 쿼리 메소드 (1) (0) | 2019.10.03 |
[Spring Framework] Spring Data JPA Repository 테스트 (0) | 2019.10.01 |
[Spring Framework] Spring Data JPA Repository (0) | 2019.09.29 |
[Spring Framework] Spring Data JPA 엔티티 클래스 (Entity Class) (0) | 2019.09.29 |