송파구청 특강 (2021-06 ~ 2021-07)/SpringBoot

강의17

배워도끝이없네 2021. 7. 1. 14:22

쿼리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