๐ ํ์ด์ง ์ฒ๋ฆฌ
@Test
public void testPageDefault(){
Pageable pageable = PageRequest.of(0,10);
Page<Memo> result = memoRepository.findAll(pageable);
}
pageable์ ์ธํฐํ์ด์ค ์ด๊ธฐ ๋๋ฌธ์ ๊ตฌํ์ฒด์ธ PageRequest์ static ๋ฉ์๋์ธ of( )์ผ๋ก ์ฒ๋ฆฌํ๋ค.
(0,10)์ด๋ 1ํ์ด์ง์ 10๊ฐ๋ฅผ ์๋ฏธํ๋ค. (0-indexed)
Pageable์ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ๋ Pageํ์ ์ ๋ฐํํ๋ค.
Hibernate:
select
memo0_.mno as mno1_0_,
memo0_.memo_text as memo_tex2_0_
from
tbl_memo memo0_ limit ?
Hibernate:
select
count(memo0_.mno) as col_0_0_
from
tbl_memo memo0_
๋ฐํ ํ์ ์ด List๊ฐ ์๋๋ผ Page๋ผ๋ ์
๐ ์ ๋ ฌ ์กฐ๊ฑด ์ถ๊ฐ
@Test
public void testSort(){
Sort sort1 = Sort.by("mno").descending();
Sort sort2 = Sort.by("memoText").ascending();
Sort sortAll = sort1.and(sort2);
Pageable pageable = PageRequest.of(0,10, sortAll);
Page<Memo> result = memoRepository.findAll(pageable);
}
Sort ์ฌ์ฉ๋ฒ(by, ~scending(), and) ์ฃผ๋ชฉ
์ค๋ฒ๋ผ์ด๋ฉ ๋ of ๋ฉ์๋ ์ฌ์ฉ(์์์ ์ค๋ช )
๋ก๊ทธ
Hibernate:
select
memo0_.mno as mno1_0_,
memo0_.memo_text as memo_tex2_0_
from
tbl_memo memo0_
order by
memo0_.mno desc,
memo0_.memo_text asc limit ?
Hibernate:
select
count(memo0_.mno) as col_0_0_
from
tbl_memo memo0_
๐ Query Methods
- ์ฟผ๋ฆฌ๋ฉ์๋๋ ๋ฉ์๋์ ์ด๋ฆ ์์ฒด๊ฐ ์ง์๋ฌธ์ด ๋๋ ๊ธฐ๋ฅ์ด๋ค.
- ์์ ์์ ๋ค์ด JpaRepository๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ฉฐ, ์๋์์ฑ์ผ๋ก ๋ณด์ด๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์๋ค๋ฉด
- ์ฟผ๋ฆฌ ๋ฉ์๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๊ธด ์์ผ๋ฉด์๋ ์ฌ์ค ์๋ ๋ฉ์๋๋ค์, ๋ฉ์๋ ์ด๋ฆ์ ์ ์ง์ด์ + ์ ์ฐพ์์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
public interface MemoRepository extends JpaRepository<Memo,Long> {
//1
List<Memo> findByMnoBetweenOrderByMnoDesc(Long from,Long to);
//2
Page<Memo> findByMnoBetween(Long from, Long to, Pageable pageable);
}
๋ ํผ๋ฐ์ค๋ฅผ ์ ์ฐพ๊ฑฐ๋, ์ฟผ๋ฆฌ ๋ฉ์๋๋ฅผ ์ํ ์ธํ ๋ฆฌ์ ์ด์ ์๋์์ฑ์ ๋์์ ๋ฐ์, ๊ท์น์ ๋ง๋(๋ช ๋ช ๋ฒ, ๋งค๊ฐ๋ณ์, ๋ฐํํ์ ๋ฑ) ๋ฉ์๋๋ฅผ ์ ์ฐพ์์ ์ฌ์ฉํ ์ ์๋ค.
Pageable์ ๋๋ถ๋ถ ์ด๋ ์ฟผ๋ฆฌ๋ฉ์๋์๋ ๊ฒฐํฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ณดํต ํ์ด์ง๊ณผ ์ ๋ ฌ์กฐ๊ฑด์ ๋นผ๊ณ , 1->2 ์ฒ๋ผ ๋ง๋ ๋ค.
sql์ด ๋ณต์กํด์ง์๋ก ๋ถํธํด์ง๊ธฐ ๋๋ฌธ์, ๊ฐ๋จํ ์ฒ๋ฆฌ๋ง ์ฟผ๋ฆฌ๋ฉ์๋๋ฅผ ์ด์ฉํ๊ณ , ๋ค์ ํ ํฝ์ด ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๋ค.
๐ @Query, JPQL(๊ฐ์ฒด์งํฅ ์ฟผ๋ฆฌ)
- ORM์ ๊ฐ๋ ์ ์ ์ฉํ๋ค๋ ๋๋์ด ํ ๋ ๋ค. (Table -> Class, instance -> row, column -> field)
@Query("select memo from Memo memo order by memo.mno desc")
List<Memo> getListDesc();
Hibernate:
select
memo0_.mno as mno1_0_,
memo0_.memo_text as memo_tex2_0_
from
tbl_memo memo0_
order by
memo0_.mno desc
//ํ๋ผ๋ฏธํฐ๊ฐ ํ๋(์ปฌ๋ผ)์ผ ๋ :xxx ์ผ๋ก !
//pageable์ ์ค์ ํ ๊ฑฐ๋ฉด countQuery์์ฑ ์ ์ฉ!
@Query(value = "select memo from Memo memo where memo.mno > :mno", countQuery = "select count(memo) from Memo memo where memo.mno > :mno ")
Page<Memo> getListWithQuery(Long mno, Pageable pageable);
Hibernate:
select
memo0_.mno as mno1_0_,
memo0_.memo_text as memo_tex2_0_
from
tbl_memo memo0_
where
memo0_.mno>?
order by
memo0_.mno desc limit ?
Hibernate:
select
count(memo0_.mno) as col_0_0_
from
tbl_memo memo0_
where
memo0_.mno>?
//ํ๋ผ๋ฏธํฐ๊ฐ ํ๋(์ปฌ๋ผ)์ผ ๋ :xxx ์ผ๋ก !
//delete, update, insert dml(select ์ ์ธ)๋ ๋ ์ด๋
ธํ
์ด์
์ ๋ถ์ฌ์ค์ผ ํ๋ค.
@Query("update Memo memo set memo.memoText = :memoText where memo.mno = :mno")
@Transactional
@Modifying
int updateMemoText(@Param("mno") Long mno, @Param("memoText") String memoText);
Hibernate:
update
tbl_memo
set
memo_text=?
where
mno=?
//ํ๋ผ๋ฏธํฐ๊ฐ ๊ฐ์ฒด(์ํฐํฐ)์ผ ๋ : :#{} ์ผ๋ก !
@Query("update Memo memo set memo.memoText = :#{#param.memoText} where memo.mno = :#{#param.mno}")
@Transactional
@Modifying
int updateMemoText(@Param("param") Memo memo );
Hibernate:
update
tbl_memo
set
memo_text=?
where
mno=?
//JPQL์ ์ฅ์ ์ Object๋ ๋ฐ์์ฌ ์ ์์
//๋์ค์ ์กฐ์ธ ๋ฑ์ผ๋ก ์ ๋นํ ์ํฐํฐํ์
์ด ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ์
@Query("select memo.mno, memo.memoText, current_date from Memo memo where memo.mno > :mno")
List<Object[]> getListWithQueryObject(Long mno);
Hibernate:
select
memo0_.mno as col_0_0_,
memo0_.memo_text as col_1_0_,
current_date as col_2_0_
from
tbl_memo memo0_
where
memo0_.mno>?
//์ด์ฉ ์ ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ Native SQL๋ ์์ผ๋ฉฐ, nativeQuery๋ฅผ true๋ก ๋๊ณ ์ฌ์ฉํ๋ค.
@Query(value="select * from tbl_memo where mno > 0", nativeQuery = true)
List<Object[]> getNativeResult();
Hibernate:
select
*
from
tbl_memo
where
mno > 0