작성자 : 김여원, 박재용

📌 검색 필터 쿼리 개선

키워드 검색

public Page<Post> findAllByContainingKeyword(int page, Set<String> keywords, String sortType, Long companyId) {
        BooleanBuilder builder = new BooleanBuilder();
        for (String key : keywords) {
            builder.or(post.content.like("%"+key+"%"))
                    .or(post.title.like("%"+key+"%"))
                    .or(keyword.keyword.like("%"+key+"%"));
        }

        builder.and(post.member.company.id.eq(companyId)
                .and(post.valid.eq(true)));

        JPAQuery<Post> result = new JPAQuery<>(entityManager);
        return new PageImpl<>(result.select(post)
                .from(post)
                .join(post.keywords, keyword).fetchJoin()
                .join(post.member, member).fetchJoin()
                .where(builder)
                .distinct()
                .offset((page-1)*10)
                .limit(10)
                .orderBy(sortingFilter(sortType))
                .fetch());
    }

카테고리 검색

public Page<Post> findAllByContainingCategory(int page,  String c, String sortType, Long companyId) {
        BooleanBuilder builder = new BooleanBuilder();
        builder.and(post.member.company.id.eq(companyId))
                .and(post.valid.eq(true));

        JPAQuery<Post> result = new JPAQuery<>(entityManager);
        return new PageImpl<>(result.select(post)
                .from(post)
                .join(post.category, category).fetchJoin()
                .where(builder
                        .and(post.category.categoryName.eq(c)))
                .distinct()
                .offset((page-1)*10)
                .limit(10)
                .orderBy(sortingFilter(sortType))
                .fetch());

    }

OrderBy에 사용하는 메서드