์์ ๋ก ์ ๋ชฉ์ 1์ด๋ผ๋ ๊ธ์๊ฐ ์๋ ์ํฐํฐ๋ค์ ๊ฒ์ํด๋ณด๋ฉด
๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์์ต๋๋ค.
@Test
public void testQuery1(){
PageRequest pageable = PageRequest.of(0,10, Sort.by("gno").descending());
QGuestbook qGuestbook = QGuestbook.guestbook; //1
String keyword="1";
BooleanBuilder builder = new BooleanBuilder(); //2
BooleanExpression expression = qGuestbook.title.contains(keyword); //3
builder.and(expression); //4
Page<Guestbook> result = guestbookRepository.findAll((Predicate) builder, (org.springframework.data.domain.Pageable) pageable); //5
result.stream().forEach(guestbook -> {
System.out.println(guestbook);
});
}
์ด๋ฅผ ํตํด์ ํ์ด์ง ์ฒ๋ฆฌ์ ๋์์ ๊ฒ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋๋ค.
ํ ์คํธ ์ฝ๋๋ฅผ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๊ฐ ๋์ํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
Hibernate:
select
guestbook0_.gno as gno1_0_,
guestbook0_.moddate as moddate2_0_,
guestbook0_.regdate as regdate3_0_,
guestbook0_.content as content4_0_,
guestbook0_.title as title5_0_,
guestbook0_.writer as writer6_0_
from
guestbook guestbook0_
where
guestbook0_.title like ? escape '!'
order by
guestbook0_.gno desc limit ?
Hibernate:
select
count(guestbook0_.gno) as col_0_0_
from
guestbook guestbook0_
where
guestbook0_.title like ? escape '!'
์คํ๋๋ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ฉด ์ค๊ฐ์ where ์กฐ๊ฑด์ ์์ title์ ๋ํ ์ฒ๋ฆฌ๊ฐ ์จ์ ํ ์งํ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
4.4 ์๋น์ค ๊ณ์ธต๊ณผ DTO
์ค์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๊ฒฝ์ฐ์ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ์์ ๊ณ์ธต ๋ฐ๊นฅ์ชฝ์์ ์ฌ์ฉํ๋ ๋ฐฉ์ ๋ณด๋ค๋
DTO(Data Transfer Object)๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์์ ๊ถ์ฅํฉ๋๋ค.
DTO๋ ์ํฐํฐ ๊ฐ์ฒด์ ๋ฌ๋ฆฌ ๊ฐ ๊ณ์ธต๋ผ๋ฆฌ ์ฃผ๊ณ ๋ฐ๋ ์ฐํธ๋ฌผ์ด๋ ์์์ ๊ฐ๋ ์ ๋๋ค.
์์ํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ค๋ ์ ์์๋ ์ํฐํฐ ๊ฐ์ฒด์ ์ ์ฌํ์ง๋ง, ๋ชฉ์ ์์ฒด๊ฐ ๋ฐ์ดํฐ์ ์ ๋ฌ์ด๋ฏ๋ก
์ฝ๊ณ , ์ฐ๋ ๊ฒ์ด ๋ชจ๋ ํ์ฉ๋๋ ์ ์ด ๊ฐ๋ฅํ๊ณ
์ผํ์ฑ์ผ๋ก ์ฌ์ฉ๋๋ ์ฑ๊ฒฉ์ด ๊ฐํฉ๋๋ค.
JPA๋ฅผ ์ด์ฉํ๊ฒ ๋๋ฉด ์ํฐํฐ ๊ฐ์ฒด๋ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๊ฐ์ฒด๊ฐ ์๋๋ผ
์ค์ ๋์ดํฐ๋ฒ ์ด์ค์ ๊ด๋ จ์ด ์๊ณ , ๋ด๋ถ์ ์ผ๋ก ์ํฐํฐ ๋งค๋์ ๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์ ๋๋ค.
์์ ์์๋ ์๋น์ค ๊ณ์ธต์ ์์ฑํ๊ณ ์๋น์ค ๊ณ์ธต์์๋
DTO๋ก ํ๋ผ๋ฏธํฐ์ ๋ฆฌํด ํ์ ์ ์ฒ๋ฆฌํ๋๋ก ๊ตฌ์ฑํ ๊ฒ์ ๋๋ค.
ํ๋ก์ ํธ ๋ด์ dtoํจํค์ง์ service ํจํค์ง๋ฅผ ์ถ๊ฐํฉ๋๋ค.
dtoํจํค์ง์๋ ์๋น์ค ๊ณ์ธต์์ ํ๋ผ๋ฏธํฐ์ ๋ฆฌํด ํ์ ์ผ๋ก ์ฌ์ฉ๋๋ GuestbookDTO ํด๋์ค๋ฅผ ์ ์ํฉ๋๋ค.
package org.zerock.guestbook.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class GuestbookDTO {
private Long gno;
private String title;
private String content;
private String writer;
private LocalDateTime regDate, modDate;
}
์์ฑ๋ GuestbookDTO๋ ์ํฐํฐ ํด๋์ค์ธ Guestbook๊ณผ ๊ฑฐ์ ๋์ผํ ํ๋๋ค์ ๊ฐ์ง๊ณ ์๊ณ , getter/setter๋ฅผ ํตํด ์์ ๋กญ๊ฒ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๊ฒ ๊ตฌ์ฑํฉ๋๋ค.
์๋น์ค ๊ณ์ธต์์๋
GuestbookDTO๋ฅผ ์ด์ฉํด์ ํ์ํ ๋ด์ฉ์ ์ ๋ฌ๋ฐ๊ณ , ๋ฐํํ๋๋ก ์ฒ๋ฆฌํ๋๋ฐ
GuestbookService ์ธํฐํ์ด์ค์ GuestbookServiceImplํด๋์ค๋ฅผ ์์ฑํฉ๋๋ค.
๊ฐ์ฅ๋จผ์ GuestbookDTO๋ฅผ ์ด์ฉํด์
์๋ก์ด '๋ฐฉ๋ช ๋ก'์ ๋ฑ๋กํ๋ ์๋๋ฆฌ์ค๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
package org.zerock.guestbook.service;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
import org.zerock.guestbook.dto.GuestbookDTO;
@Service
@Log4j2
public class GuestbookServiceImpl implements GuestbookService{
@Override
public Long register(GuestbookDTO dto){
return null;
}
}
GuestbookServiceImpl ํด๋์ค์๋ ์คํ๋ง์์ ๋น์ผ๋ก ์ฒ๋ฆฌ๋๋๋ก @Service ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํฉ๋๋ค.
4.4.1 ๋ฑ๋ก๊ณผ DTO๋ฅผ ์ํฐํฐ๋ก ๋ณํํ๊ธฐ
https://link.coupang.com/a/UtQhs
์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ ์น ํ๋ก์ ํธ
COUPANG
www.coupang.com
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
'Spring > ๐ฅ[spring]์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ ์น ํ๋ก์ ํธ_๊ตฌ๋ฉ๊ฐ๊ฒ ์ฝ๋ฉ๋จ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
4.4.1 ๋ฑ๋ก๊ณผ DTO๋ฅผ ์ํฐํฐ๋ก ๋ณํํ๊ธฐ (0) | 2023.03.03 |
---|---|
4.3.2 ์ํฐํฐ์ ํ ์คํธ (0) | 2023.02.17 |
4.3.1 ๋์ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ๋ฅผ ์ดํ Querydsl ์ค์ (0) | 2023.02.13 |
4.2 ์๋์ผ๋ก ์ฒ๋ฆฌ๋๋ ๋ ์ง/์๊ฐ ์ค์ (0) | 2023.02.07 |
ํ๋ก์ ํธ ๊ตฌ์กฐ ๋ง๋ค๊ธฐ (0) | 2023.02.06 |