-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
List 형태의 검색조건에 대해
22.05.06 11:24 작성 조회수 170
1
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
여기에 질문 내용을 남겨주세요.
PositionType positionType,
List<String> majorSkillKeywords,
String minorSkill,
List<HopeWorkState> hopeWorkStates,
List<PositionWorkManShip> positionWorkManShips
대강 이러한 파라미터들로 이루어지는데 단일 파라미터가 아닌 List 형태의 파라미터는 BooleanExpression을 활용한 메서드를 어떻게 구성해줘야 하는지 감이 잘 안잡혀요. BooleanExpression을 리스트 형태로 반환하는 형태의 메서드로 구성하면 되려나요? 예를들어 majorSkills 에 대해선
private List<BooleanExpression> eqMajorSkills(List<String> majorSkillKeywords)
이런 형태의 메서드로요. 맞는 방식인지도 모르겠네요ㅜㅜㅜ
답변을 작성해보세요.
0
김영한
지식공유자2022.05.08
안녕하세요. 마뇽님
정확히 어떤 것이 고민인지 잘 이해가 되지 않습니다.
실제 동작하는 구제적인 예제를 만들어서 올려주시겠어요?
전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.
주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요
추가로 다음 내용도 코멘트 부탁드립니다.
1. 실행 방법을 알려주세요.
2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.
감사합니다.
마뇽
질문자2022.05.24
안녕하세요 영한님! 답변감사드리고 설명이 부족해 죄송합니다..
우선 프로젝트 공유 부부은 aws 키정보가 프로젝트에 있어 뭔가 공유하기가 조금 무서워서 … 하지 않았습니다ㅠㅠ
우선 질문은 당장은 BooleanBuilder로 구현했습니다.
기능에 대한 개요를 설명드리면
- 개발자 목록을 검색해야 합니다.
- 주요 스킬 항목은 db엔 문자열입니다. Ex. Java,spring,mysql..
- 주요 스킬 검색 키워드는 List 형태의 파라미터로 요청됩니다. Ex. List<String> : 0:java, 1:spring, 2:javascript..
- 검색기능은 위의 List항목이 포함된 개발자를 검색하게 됩니다
간략하게 이런 기능입니다. 검색조건은 주요 스킬 외에 더 있긴한데 질문에 대한건 주요 스킬(majorSkill) 만으로 설명이 가능하기에 생략했구 코드는
public Slice<Developer> findFreelancerProfileByFetch(
PositionType positionType,
List<String> majorSkillConditions,
String minorSkill,
List<HopeWorkState> hopeWorkStates,
List<PositionWorkManShip> positionWorkManShips,
String workArea
) {
BooleanBuilder builder = new BooleanBuilder();
builder.and(developer.positionType.eq(positionType));
eqMinorSkills(minorSkill, builder);
eqMajorSkillConds(majorSkillConditions, builder);
eqHopeWorkStateConds(hopeWorkStates, builder);
eqPositionWorkShipConds(positionWorkManShips, builder);
eqWorkAreaConds(workArea, builder);
QueryResults<Developer> developerQueryResults = jpaQueryFactory.selectFrom(developer)
.innerJoin(developer.freelancerProfile, freelancerProfile).fetchJoin()
.innerJoin(freelancerProfile.freelancer, freelancer).fetchJoin()
.where(builder)
.fetchResults();
return new SliceImpl<Developer>(developerQueryResults.getResults());
}
private void eqMajorSkillConds(List<String> majorSkillKeywords, BooleanBuilder builder) {
if (majorSkillKeywords == null) {
return;
}
for (String majorSkillKeyword : majorSkillKeywords) {
builder.and(developer.focusSkill.containsIgnoreCase(majorSkillKeyword));
}
}
이렇습니다. BooleanBuilder를 하나 놓고 저기에 계속 쿼리를 추가하는 방식이라고 정리할수 있을거 같아요!
이제 핵심적인 질문은 eqMajorSillConds 메서드 처럼 한 컬럼의 여러 조건을 검색해야 할때 BooleanExpression으로 어떻게 구현할수 있는지가 궁금했어요 ㅎㅎ
답변 늦어져서 죄송합니다ㅠㅠ
답변 1