Backend/Spring

JPQL

brian110326 2024. 4. 11. 20:01

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