JPA Query Language๋ก JPA์์ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ์ด๋ค. SQL๊ณผ JPQL์ ์ฐจ์ด๋ SQL์ ํ ์ด๋ธ์ด๋ ์นผ๋ผ์ ์ด๋ฆ์ ์ฌ์ฉํ๋๋ฐ JPQL์ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ ์ํฐํฐ์ ์ด๋ฆ๊ณผ ํ๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ค.
์ฟผ๋ฆฌ ๋ฉ์๋๋ ์ฃผ์ (Subject)์ ์์ ์ด(Predicate)๋ก ๊ตฌ๋ถํ๋ค. 'find domain By' ํน์ 'exists domain By'์ ๊ฐ์ ํค์๋๋ฅผ ์ด์ฉํ๊ณ By๋ค์์ ์นผ๋ผ๋ช ์ด ๋ค์ด๊ฐ๋ค. ์ฌ๋ฌ๊ฐ๋ And๋ก ์ฐ๊ฒฐ.
// (return type) + (์ฃผ์ + ์์ ์ด(์์ฑ)) ๊ตฌ์กฐ์ ๋ฉ์๋
List<Person> findByLasnameAndEmail(String lastName, String email);
ํน์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๋ ํค์๋๋ก boolean์ ๋ฐํํ๋ค.
boolean extistByNumber(Long number);
์กฐํ ํ ๊ฒฐ๊ณผ์ ๋ ์ฝ๋ ๊ฐ์๋ฅผ ๋ฐํํ๋ค.
long countByName(String name);
๊ฐ์ด null์ธ์ง ๊ฒ์ฌ
List<Product> findByUpdatedAtNull();
List<Product> findByUpdatedAtNotNull();
boolean ํ์ ์ผ๋ก ์ง์ ๋ ์นผ๋ผ์ ํ์ธ
Product findByActiveTrue();
Product findByActiveFalse();
ORDER BY ๊ตฌ๋ฌธ์ด์ฉํ์ฌ ์ ๋ ฌ
List<Product> findByNameOrderByNumberAsc(String name);
List<Product> findByName(String name, Sort sort);
productRepository.findByName("pen", Sort.by(Order.asc("price");
Page<Product> findByName(String name, Pageable pageable);
//ํ์ด๋ name์ ๊ฐ์ง Prodcut ์ค ํ์ด์ง๋น 2๊ฐ์ฉ ๊ฐ์ฒด ์ถ๋ ฅ
Page<Product> productPage = productRepository.findByName("ํ", PageRequest.of(0,2);
๋ฆฌํด ํ์
์ผ๋ก๋ Page ๊ฐ์ฒด๋ฅผ ๋ฐ์์ผํ๊ณ Pageable ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด PageRequest class๋ฅผ ์ฌ์ฉํ๋ค.
PageRequest๋ Pageable์ ๊ตฌํ์ฒด์ด๋ค.
|of ๋ฉ์๋|๋งค๊ฐ๋ณ์ ์ค๋ช
|๋น๊ณ |
|of(int page, int size)|ํ์ด์ง ๋ฒํธ(0๋ถํฐ ์์), ํ์ด์ง๋น ๋ฐ์ดํฐ ๊ฐ์|์ ๋ ฌx|
|of(int page, int size, Sort|ํ์ด์ง ๋ฒํธ, ํ์ด์ง๋น ๋ฐ์ดํฐ ๊ฐ์, ์ ๋ ฌ|sort์ ์ํด ์ ๋ ฌ|
@Query๋ฅผ ์ด์ฉํ์ฌ ์ง์ JPQL์ ์์ฑํ ์ ์๋ค.
//ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ธ๋ฉํ์ฌ ๊ฐ๋
์ฑ์ด ๋์์ง๊ณ ์ ์ง๋ณด์๊ฐ ์ฌ์์ง๋ค.
@Query("SELECT p FROM Product p WHERE p.name = :name")
List<Product> findByNameParam(@Param("name" String name);
@Query("SELECT p.name, p.price, p.stock FROM Product p WHERE p.name = :name")
LisT<Object[]> findByNameParam2(@Param("name") String name);
์ถ์ฒ : ์คํ๋ง๋ถํธ ํต์ฌ ๊ฐ์ด๋