점프투스프링부트 추가기능 구현 두번째, 프로필 입니다.
이번에 브랜치를 파고 작업하는 것을 놓쳐서.. main에 바로 커밋되어.. issue에 최대한 정리했으니 참고하시면 좋을 것 같습니다.
Repository 코드만 포스팅 하겠습니다. 혹시 참조하실 분들은 상세 코드는 아래 이슈를 참조해주세요
구현 방식
프로필 페이지
작성한 질문 보여지기 : 총 업로드 개수와 가장 최근 5개 리스트, 클릭 시 이동
Long countByAuthor(SiteUser author);
List<Question> findTop5ByAuthorOrderByCreateDateDesc(SiteUser author);
@Query("select "
+ "distinct q "
+ "from Question q "
+ "left outer join SiteUser u1 on q.author=u1 "
+ "left outer join Answer a on a.question=q "
+ "left outer join SiteUser u2 on a.author=u2 "
+ "where "
+ " (q.author.id = :authorId) "
+ " and ( "
+ " q.subject like %:kw% "
+ " or q.content like %:kw% "
+ " or a.content like %:kw% "
+ " or u2.username like %:kw% "
+ " )")
Page<Question> findAllByKeywordAndAuthorId(@Param("kw") String kw, @Param("authorId") Long authorId, Pageable pageable);
본인이 답변한 게시글 보여지게 : 최근 5개만 보이고 전체를 볼 수 있도록
@Query("select "
+ "distinct q "
+ "from Question q "
+ "left outer join SiteUser u1 on q.author = u1 "
+ "left outer join q.answerList a "
+ "left outer join SiteUser u2 on a.author = u2 "
+ "where "
+ " (u2.id = :authorId) "
+ " and ( "
+ " q.subject like %:kw% "
+ " or q.content like %:kw% "
+ " or u1.username like %:kw% "
+ " or a.content like %:kw% "
+ " or u2.username like %:kw% "
+ " )")
Page<Question> findAllByKeywordAndAndAnswer_AuthorId(@Param("kw") String kw, @Param("authorId") Long authorId, Pageable pageable);
}
- answerList 자체를 left조인이 포인트!
```HTML
<a th:href="@{|/question/detail/${answer.question.id}#answer_${answer.id}|}" th:text="${answer.question.subject}"