JPQL(Java Persistence Query Language)
: 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리
: SQL 을 추상화해서 특정 데이터베이스 SQL에 의존하지 않음
https://docs.spring.io/spring-data/jpa/reference/jpa/query-methods.html
JPA Query Methods :: Spring Data JPA
By default, Spring Data JPA uses position-based parameter binding, as described in all the preceding examples. This makes query methods a little error-prone when refactoring regarding the parameter position. To solve this issue, you can use @Param annotati
docs.spring.io
1. Repository
package cohttp://m.example.jpa.repository;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import cohttp://m.example.jpa.entity.Board;
import java.util.List;
public interface BoardRepository extends JpaRepository<Board, Long> {
// id로 찾기(findById), 전체 찾기(findAll)
// title로 찾기
List<Board> findByTitle(String title);
// writer로 찾기
List<Board> findByWriter(String writer);
// like
List<Board> findByTitleLike(String title);
List<Board> findByTitleStartingWith(String title);
List<Board> findByTitleEndingWith(String title);
List<Board> findByTitleContaining(String title);
// writer가 user로 시작하는 회원 조회
List<Board> findByWriterStartingWith(String writer);
// title이 Title 키워드가 있거나
// content가 Content 문자열 포함되어있는
List<Board> findByTitleContainingOrContent(String title, String content);
List<Board> findByTitleContainingOrContentContaining(String title, String content);
// title이 Title 키워드가 있고,
// id가 50보다 큰 게시물 조회
List<Board> findByTitleContainingAndIdGreaterThan(String title, Long id);
// id가 50보다 큰 게시물 조회 시 내림차순 정렬
List<Board> findByIdGreaterThanOrderByIdDesc(Long id);
List<Board> findByIdGreaterThanOrderByIdDesc(Long id, Pageable pageable);
}
2. Repository Test
@Test
public void queryMethodTest() {
// where b1_0.title=?
// List<Board> list = boardRepository.findByTitle("Title");
// System.out.println("findByTitle : " + list.size());
// List<Board> list2 = boardRepository.findByTitleLike("Title");
// System.out.println("findByTitleLike : " + list2.size());
// List<Board> list3 = boardRepository.findByTitleStartingWith("Title");
// System.out.println("findByTitleStartingWith : " + list3.size());
// List<Board> list4 = boardRepository.findByTitleEndingWith("Title");
// System.out.println("findByTitleEndingWith : " + list4.size());
// List<Board> list5 = boardRepository.findByTitleContaining("Title");
// System.out.println("findByTitleContaining : " + list5.size());
// List<Board> list6 = boardRepository.findByWriterStartingWith("user");
// System.out.println("findByWriterStartingWith " + list6.size());
// where
// b1_0.title like ? escape '\'
// or b1_0.content=?
// List<Board> list = boardRepository.findByTitleContainingOrContent("Title",
// "Content");
// System.out.println(list.size());
// where
// b1_0.title like ? escape '\'
// or b1_0.content like ? escape '\'
// List<Board> list2 =
// boardRepository.findByTitleContainingOrContentContaining("Title", "Content");
// System.out.println(list2.size());
// List<Board> list =
// boardRepository.findByTitleContainingAndIdGreaterThan("Title", 50L);
// System.out.println(list.size());
// List<Board> list2 = boardRepository.findByIdGreaterThanOrderByIdDesc(50L);
// System.out.println(list2.size());
// PageRequest.of(페이지번호, 페이지당 게시물 수); , 페이지번호는 0부터 시작
Pageable pageable = PageRequest.of(0, 10);
List<Board> list = boardRepository.findByIdGreaterThanOrderByIdDesc(0L, pageable);
list.forEach(System.out::println);
}
'Backend > Spring' 카테고리의 다른 글
QueryDSL(1) (0) | 2024.04.12 |
---|---|
Native Sql (0) | 2024.04.12 |
영속성 전이 : CASCADE (0) | 2024.04.08 |
Repository 작성 및 Repository Test (0) | 2024.04.03 |
JPA와 DB 연동 (0) | 2024.04.03 |