쿼리DSL을 사용할때 무조건 Impl을 붙여야한다
1. 인터페이스를 만들어라
2. 임플클래스를 만든다
3. querydslRepositorySupport상속받는다 (구현체)
4. 기존레포지토리에서 상속받는다.
JPQL을 쓰면 만들어지는 Q가붙어있는 애들을 QDomain이라고 한다
public interface TodoSearch {
Todo doA();
Page<Todo> listWithSearch(String keyword, Pageable pageable);
}
TodoSearch 인터페이스
@Log4j2
public class TodoSearchImpl extends QuerydslRepositorySupport implements TodoSearch{
public TodoSearchImpl() { //슈퍼클래스에 생성자가있으면 반드시 먼저 선언해줘야한다.
super(Todo.class);
}
@Override
public Todo doA() {
log.warn("doA............................"); //select문같은건 어디서 정의하지?
log.warn("doA............................");
log.warn("doA............................");
QTodo todo = QTodo.todo;
JPQLQuery<Todo> query = from(todo); // 쿼리를 생성할때ㅐ 사용함
//where todo.tno = 170
query.where(todo.tno.gt(170L)); //170보다 큰애들 where조건에 넣는것
//content like '%9%' 이런검색조건을 expression이라고 한다.
// query.where(todo.content.like("%9%"));
query.orderBy(todo.tno.desc());
query.offset(0);
query.limit(10);
long count = query.fetchCount(); //카운트값을 날려준다
List<Todo> result = query.fetch();
log.warn("=======================================");
log.info("count"+count);
log.warn(result);
return null;
}
@Override
public Page<Todo> listWithSearch(String keyword, Pageable pageable) {
log.warn("listWithSearch......");
QTodo todo = QTodo.todo;
JPQLQuery<Todo> query = from(todo);
if(keyword != null && keyword.trim().length() != 0){
query.where(todo.content.contains(keyword));
}
query.orderBy(todo.tno.desc());
query.where(todo.tno.gt(0L));
//pageable = 0, 10
//paging
query.offset(pageable.getOffset());
query.limit(pageable.getPageSize());
List<Todo> list = query.fetch();
long count = query.fetchCount();
return new PageImpl<>(list,pageable,count);
}
}
TodoSearchImpl (상속받은것들을 잘 보자)
'송파구청 특강 (2021-06 ~ 2021-07) > SpringBoot' 카테고리의 다른 글
| 강의 19 (0) | 2021.07.05 |
|---|---|
| 강의18 (0) | 2021.07.02 |
| 강의16 (0) | 2021.07.01 |
| 강의15 (0) | 2021.07.01 |
| 강의14 (0) | 2021.06.30 |