๐งก JPQL
๐ ์ฟผ๋ฆฌ ๋ฉ์๋์ ์์ฑ ์
// (๋ฆฌํดํ์
) + {์ฃผ์ + ์์ ์ด(์์ฑ)} ๊ตฌ์กฐ์ ๋ฉ์๋
List<Person> findByLastnameAndEmail(
String lastName, String email
);
๐ ์ฟผ๋ฆฌ ๋ฉ์๋์ ์ฃผ์ ํค์๋
find...By
read...By
get...By
query...By
search...By
stream...By
๊ธฐ๋ฅ์ ์ํํ๋ ํค์๋. (...)์๋ ๋๋ฉ์ธ์ ํํ ๊ฐ๋ฅ. ๋ฆฌํด ํ์ ์ผ๋ก๋ Collection์ด๋ Stream์ ์ํ ํ์ ํ์ ์ ์ค์ ํ ์ ์๋ค.
exists...By
count...By
delete...By, remove...By
First<number>...
, Top<number>...
<number>
๋ฅผ ์๋ตํ๋ฉด ๋จ.๐ JPQL์ ์กฐ๊ฑด์ ํค์๋
Is
๊ฐ์ ์ผ์น๋ฅผ ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉํ๋ ์กฐ๊ฑด์ ํค์๋. ์๋ต๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฉฐ Equals์ ๋์ผํ ๊ธฐ๋ฅ ์ํ.
(Is)Not
๊ฐ์ ๋ถ์ผ์น๋ฅผ ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉํ๋ ์กฐ๊ฑด์ ํค์๋. Is๋ ์๋ต ๊ฐ๋ฅํ๊ณ Not ํค์๋๋ง ์ฌ์ฉํ ์๋ ์์.
(Is)Null, (Is)NotNull
๊ฐ์ด null์ธ์ง ๊ฒ์ฌํ๋ ์กฐ๊ฑด์ ํค์๋.
(Is)True, (Is)False
boolean ํ์
์ผ๋ก ์ง์ ๋ ์นผ๋ผ๊ฐ์ ํ์ธํ๋ ํค์๋.
And, Or
์ฌ๋ฌ ์กฐ๊ฑด์ ๋ฌถ์ ๋ ์ฌ์ฉ.
(Is)GreaterThan, (Is)LessThan, (Is)Between
์ซ์๋ datetime ์นผ๋ผ์ ๋์์ผ๋ก ํ ๋น๊ต ์ฐ์ฐ์ ์ฌ์ฉํ๋ ์กฐ๊ฑด์ ํค์๋. Greater, Less ํค์๋๋ ๋น๊ต ๋์์ ๋ํ ์ด๊ณผ/๋ฏธ๋ง์ ๊ฐ๋
์ผ๋ก ๋น๊ต ์ฐ์ฐ์ ์ํ, ๊ฒฝ๊ณ๊ฐ์ ํฌํจํ๋ ค๋ฉด Equal ํค์๋๋ฅผ ์ถ๊ฐ.
(Is)StartingWith(==StartsWith), (Is)EndingWith(==EndsWith), (Is)Containg(==Contains), (Is)Like
์นผ๋ผ๊ฐ์์ ์ผ๋ถ ์ผ์น ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ์กฐ๊ฑด์ ํค์๋. ์ฟผ๋ฆฌ๋ฌธ์ '%' ํค์๋์ ๋์ผํ ์ญํ . StartingWith์ ๋ฌธ์์ด์ ์, EndingWith์ ๋ฌธ์์ด์ ๋์ '%'๊ฐ ๋ฐฐ์น๋จ.
๐ ์ ๋ ฌ ์ฒ๋ฆฌ
์ผ๋ฐ์ ์ธ ์ฟผ๋ฆฌ๋ฌธ์์ ์ ๋ ฌ์ ORDER BY๋ก ์ฒ๋ฆฌ. ์ฟผ๋ฆฌ ๋ฉ์๋๋ ์ ๋ ฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํจ.
// Asc : ์ค๋ฆ์ฐจ์, Desc : ๋ด๋ฆผ์ฐจ์
List<Product> findByNameOrderByNumberAsc(String name);
List<Product> findByNameOrderByNumberDesc(String name);
๐งก ํ์ด์ง ์ฒ๋ฆฌ
Page์ Pageable์ ์ฌ์ฉ.
// ํ์ด์ง ์ฒ๋ฆฌ
Page<Product> findByName(String name, Pageable pageable);
// ๋ฉ์๋ ์ฌ์ฉ
Page<Product> productPage = productRepository.findByName("ํ", PageUequest.of(0, 2));
๐ @Query ์ด๋
ธํ
์ด์
์ฌ์ฉ
@Query ์ด๋
ธํ
์ด์
์ ์ด์ฉํด ์ง์ JPQL ์์ฑ ๊ฐ๋ฅ.
@Query("SELECT p FROM Product p WHERE p.name = :name")
List<Product> findByNameParam(@Param("name" String name);
๐ QueryDSL
์ ์ ํ์ ์ ์ด์ฉํด SQL๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋๋ก ์ง์ํ๋ ํ๋ ์์ํฌ. QueryDSL์ ๋ฌธ์์ด์ด ์๋๋ผ ์ฝ๋๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋๋ก ๋๋๋ค.
JPA Auditing
๊ฐ ๋ฐ์ดํฐ๋ง๋ค '๋๊ฐ' '์ธ์ ' ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ ๋ณ๊ฒฝํ๋์ง ๊ฐ์ํ๋ ๊ธฐ๋ฅ. ๋ํ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉ๋๋ ํ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ด๋ฌํ ํ๋๋ค์ ๋งค๋ฒ ์ํฐํฐ๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ณ๊ฒฝํ ๋๋ง๋ค ๊ฐ์ ์ฃผ์ ํด์ผ ํจ. ์ด๋ฌํ ๋ฒ๊ฑฐ๋ก์์ ํด์ํ๊ธฐ ์ํด Spring Data JPA์์๋ ๊ฐ์ ์๋์ผ๋ก ๋ฃ์ด์ฃผ๋ ๊ธฐ๋ฅ์ ์ ๊ณต.