1. 쿼리 작성하
select * from board_tb where id = 4; select count(id) from reply_tb where board_id = 4; select id, title, content, 4 reply_count from board_tb; select id, title, content, user_id, 4 reply_count from board_tb bt; select id, title, content, user_id, (select count(id) from reply_tb where board_id = bt.id) reply_count from board_tb bt;
package shop.mtcoding.blog.board; import lombok.AllArgsConstructor; import lombok.Data; import shop.mtcoding.blog.reply.Reply; import shop.mtcoding.blog.user.User; import java.util.ArrayList; import java.util.List; public class BoardResponse { @AllArgsConstructor @Data public static class CountDTO { private Integer id; private String title; private String content; private Integer userId; private Long replyCount; } }
package shop.mtcoding.blog.board; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.util.List; import java.util.Optional; public interface BoardJPARepository extends JpaRepository<Board, Integer> { @Query("select new shop.mtcoding.blog.board.BoardResponse$CountDTO" + "(b.id, b.title, b.content, b.user.id, " + "(select count(r.id) from Reply r where r.board.id = b.id)) from Board b") List<BoardResponse.CountDTO> findAllWithReplyCount(); @Query("select b from Board b join fetch b.user u where b.id = :id") Optional<Board> findByIdJoinUser(@Param("id") int id); }
package shop.mtcoding.blog.Board; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.data.domain.Sort; import shop.mtcoding.blog.board.Board; import shop.mtcoding.blog.board.BoardJPARepository; import shop.mtcoding.blog.board.BoardResponse; import shop.mtcoding.blog.user.User; import java.util.List; import java.util.Optional; @DataJpaTest public class BoardJPARepositoryTest { @Autowired private BoardJPARepository boardJPARepository; @Test public void findAllWithReplyCount_test(){ // given // when List<BoardResponse.CountDTO> boardCountDTOList = boardJPARepository.findAllWithReplyCount(); System.out.println(boardCountDTOList); // then } }
[BoardCountDTO(id=1, title=제목1, content=내용1, userId=1, replyCount=0), BoardCountDTO(id=2, title=제목2, content=내용2, userId=1, replyCount=0), BoardCountDTO(id=3, title=제목3, content=내용3, userId=2, replyCount=1), BoardCountDTO(id=4, title=제목4, content=내용4, userId=3, replyCount=3)]
Share article