250x250
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
- 인터페이스
- WebClient
- 연결 리스트
- 스택 큐 차이
- 선형 리스트
- @ComponentScan
- 배열
- mysql
- JsonNode
- CleanCode
- 마크다운
- @RequiredArgsConstructor
- 쿠키
- 정렬
- 자료구조
- 쿼리메소드
- 빅 오 표기법
- 트리
- 리스트
- 클린
- query
- 마크다운 테이블
- code
- 코드
- 클래스
- @NoArgsConstructor
- 계산 검색 방식
- java
- 클린코드
- 내부 정렬
Archives
- Today
- Total
Developer Cafe
@Query를 사용한 예시 본문
728x90
1. 제목에 대한 검색 처리
title에 특정 문자열이 들어간 게시물을 검색하고싶다면...
public interface BoardRepository extends CrudRepository<Board, Long> {
@Query("SELECT b FROM Board b WHERE b.title LIKE %?1% AND b.bno > 0 ORDER BY b.bno DESC")
public List<Board> findByTitle(String title);
}
* %?1% 에서 '?1'은 첫 번째로 전달되는 파라미터라고 생각하면 됩니다.
@Autowired
private BoardRepository repo;
@Test
public void testByTitle2() {
repo.findByTitle("17").forEach(board -> System.out.println(board));
}
결과는 게시물 번호(bno)의 역순으로 처리된 것을 확인할 수 있습니다.
2. 내용에 대한 검색 처리
public interface BoardRepository extends CrudRepository<Board, Long> {
@Query("SELECT b FROM Board b WHERE b.content LIKE %:content% AND b.bno > 0 ORDER BY b.bno DESC")
public List<Board> findByContent(@Param("content") String content);
}
3. 작성자에 대한 검색 처리
public interface BoardRepository extends CrudRepository<Board, Long> {
@Query("SELECT b FROM #{#entityName} b WHERE b.writer LIKE %?1% AND b.bno > 0 ORDER BY b.bno DESC")
public List<Board> findByWriter(String writer);
}
#{#entityName}은 Repository 인터페이스를 정의할 때 <엔티티 타입, PK 타입>에서 엔티티 타입을 자동으로 참고합니다. 지금은 그다지 쓸모가 없지만, 유사한 상속 구조의 Repository 인터페이스를 여러 개 생성하는 경우라면 유용하게 사용할 수 있습니다.
4. 필요한 칼럼만 추출하는 경우
예를 들어 content 칼럼의 내용을 제외한 칼럼을 가져오고싶다면...
public interface BoardRepository extends CrudRepository<Board, Long> {
@Query("SELECT b.bno, b.title, b.writer, b.regdate" + " FROM Board b WHERE b.title LIKE %?1% AND b.bno > 0 ORDER BY b.bno DESC")
public List<Object[]> findByTitle2(String title);
}
5. nativeQuery
@Query는 말 그대로 데이터베이스에 종속적인 SQL문을 그대로 사용할 수 있기 때문에 복잡한 쿼리를 작성할 때에는 유용하게 사용할 수 있습니다. 다만, 이 경우 데이터베이스에 독립적이라는 장점을 어느 정도 포기해야 하므로 남용하지 않도록 주의해야 합니다.
@Query에 nativeQuery 속성을 'true'라고 지정하면 메소드 실행 시 @Query의 value 값을 그대로 실행하게 됩니다.
public interface BoardRepository extends CrudRepository<Board, Long> {
@Query(value="SELECT bno, title, writer FROM tbl_boards WHERE title LIKE CONCAT('%', ?1, '%') and bno > 0 order by bno DESC", nativeQuery=true)
List<Object[]> findByTitle3(String title);
}
6. @Query와 Paging 처리/정렬
public interface BoardRepository extends CrudRepository<Board, Long> {
@Query("SELECT b FROM Board b WHERE b.bno > 0 ORDER BY b.bno DESC")
public List<Board> findBypage(Pageable pageable);
}
테스트...
@Autowired
private BoardRepository repo;
@Test
public void testByPaging() {
Pageable pageable = new PageRequest(0, 10);
repo.findBypage(pageable).forEach(board -> System.out.println(board));
}
728x90
'Spring > JPA' 카테고리의 다른 글
쿼리메소드 페이징처리 (0) | 2021.07.06 |
---|---|
쿼리메소드에서 order by 처리 (0) | 2021.07.06 |
쿼리메소드에서의 부등호 처리방법 (0) | 2021.07.06 |
Repository에서 2개 이상의 속성을 이용해 엔티티 검색하는 방법 (0) | 2021.07.06 |
Comments