tbl_board 테이블에 데이터 추가(약 30~50만개)

insert into tbl_board(bno, title, content, writer)
(select board_seq.nextval, title, content, writer
from tbl_board);

commit;

 

src/main/springstudent 경로에 있는 domain 패키지에 Criteria 클래스 추가 후 작성

@Data
public class Criteria {
	private int pageNum;
	private int amount;
	
	public Criteria() {
		this(1, 10);
	}
	
	public Criteria(int pageNum, int amount) {
		this.pageNum = pageNum;
		this.amount = amount;
	}
}

 

src/main/springstudent  경로의 persistence 패키지에 있는 IBoardDAO 수정

public List<BoardDTO> listAll(Criteria cri) throws Exception;

 

persistence 패키지 안에 있는 impl 패키지의 BoardDAOImpl 파일 수정

@Override
public List<BoardDTO> listAll(Criteria cri) throws Exception {
    return session.selectList("BoardMapper.getListWithPaging", cri);
}

 

boardMapper 파일로 가서 하단의 listAll select문 수정

<select id="getListWithPaging" resultType="com.hanul.springstudent.domain.BoardDTO">
    <![CDATA[
        SELECT	bno,
                title,
                content,
                writer,
                regdate,
                viewcount
        FROM	(
                    SELECT /*+ INDEX_DESC(tbl_board IDX_tbl_board_PK) */
                        rownum rn,
                        bno,
                        title,
                        content,
                        writer,
                        regdate,
                        viewcount
                    FROM tbl_board
                    WHERE rownum <= #{pageNum} * #{amount}
                )	
        WHERE	rn > (#{pageNum} - 1) * #{amount}
    ]]>
</select>

 

IBoardService 파일에서 listAll 추상메소드 매개변수 추가

public List<BoardDTO> listAll(Criteria cri) throws Exception;

 

IBoardService 파일로 가서 listAll 메소드 수정

@Override
public List<BoardDTO> listAll(Criteria cri) throws Exception {
    return bDao.listAll(cri);
}

 

BoardController 파일에서 목록 전체조회 메소드 수

@RequestMapping(value = "/list", method = RequestMethod.GET)
public void listAll(Criteria cri, Model model) throws Exception {
    log.info("show all list.....................");

    model.addAttribute("list", service.listAll(cri));
}

 

IBoardDAOtest 파일에 테스트 케이스 추가

@Test
public void testListCriteria() throws Exception {
    Criteria cri = new Criteria();

    // 10개씩 3페이지
    cri.setPageNum(3);
    cri.setAmount(10);

    List<BoardDTO> list = bDao.listAll(cri);

    list.forEach(board -> log.info(board.getBno() + " : " + board.getContent()));
}

 

빈공간 우클릭하여 JUnit Test 실행

 

우측 JUnit탭에 초록색으로 표시되고 하단 콘솔창에 출력이 잘 된다면 테스트 성공!

 

DB와 비교하여 21~30번째 게시물이 맞게 출력되었는지 번호 확인

 

BoardControllerTest 파일에 테스트 케이스 추가

@Test
public void testRead() throws Exception {
    log.info(mockMvc.perform(MockMvcRequestBuilders.get("/board/list")
            .param("pageNum", "3")
            .param("amount", "10"))
            .andReturn().getModelAndView().getModelMap());
}

 

빈공간 우클릭하여 JUnit Test 실행

 

우측 JUnit탭에 초록색으로 표시되고 하단 콘솔창에 출력이 잘 된다면 테스트 성공!