본문으로 바로가기

스프링[Spring] 게시판 만들기_06

category 언어/Spring 2020. 9. 14. 09:45
728x90

페이지 기능 추가

 

게시판 목록의 개수를 늘릴때 필요한 페이지 기능을 추가해보기로 한다.

 

먼저, 페이지에 대한 클래스를 작성한다.

 

1. Page.java 클래스 추가

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.myboard.vo;
 
public class Page {
    
    private int pageNum;
    private int amount;
    
    public Page() {
        this(110);
    }
    
    public Page(int pageNum, int amount) {
        this.pageNum=pageNum;
        this.amount=amount;
    }
    
    public int getPageNum() {
        return pageNum;
    }
 
    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }
 
    public int getAmount() {
        return amount;
    }
 
    public void setAmount(int amount) {
        this.amount = amount;
    }
 
    @Override
    public String toString() {
        return String.format("[%dpage, %damount]", pageNum,amount);
    }
    
 
}
 
 
 

 

현재를 기준으로 페이지에 대한 번호를 생성해야하므로 (Previous, next) 그 값을 계산하기 위한

PakeMaker 클래스 생성

 

2. PageMaker.java 클래스 추가

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.myboard.vo;
 
 
public class PageMaker {
    
    private int startPage;
    private int endPage;
    private boolean hasNext,hasPrev;
    
    private int total;
    private Page page;
    
    final int paginationSize=10;
    
    public PageMaker(Page page,int total) {
        
        int pageNum=page.getPageNum();
        int amount=page.getAmount();
        
        this.page=page;
        this.total=total;
        
        endPage=(int) (Math.ceil(pageNum/10.0)*(double)paginationSize);    
//10을 곱하는 이유는 전체번호가 1~10까지이기 때문에
        startPage=endPage-(paginationSize-1);
        
        int totalEndPage=(int)Math.ceil((double)total/amount);
        
        if(endPage>totalEndPage)
            endPage=totalEndPage;
        
        hasNext=endPage!=totalEndPage;
        hasPrev=startPage!=1;
        
    }
 
 
    @Override
    public String toString() {
        return String.format("[시작페이지=%d, 끝페이지=%d, 다음페이지=%s, 이전페이지=%b]",
                                startPage,endPage,hasNext,hasPrev);
    }
 
 
 
    public int getStartPage() {
        return startPage;
    }
 
    public int getEndPage() {
        return endPage;
    }
 
    public boolean isHasNext() {
        return hasNext;
    }
 
    public boolean isHasPrev() {
        return hasPrev;
    }
 
    public int getTotal() {
        return total;
    }
 
    public Page getPage() {
        return page;
    }
    
    
 
}
 
 
 

 

 

이후, MyBoardMapper로 이동해서

public List<MyBoardVo> getListWithPaging(Page page) 및 public int getTotal() 에 대한 인터페이스를 추가한다.

 

3. 인터페이스 추가 

 

 

 

페이지별로 출력되는 게시물의 수를 10개로 설정하기 MyBoardMapper.xml 코드 수정하자.

기존의 getList에 대한 코드가 모두 출력하는 코드이기에 이에 한 조정도 필요하다.

 

4. xml 코드 수정

 

 

 

서비스 계층에 대한 MyBoardService 및 MyBoardServiceImpl의 코드를 수정하자.

 

 

5. 비즈니스 계층 처리

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.myboard.service;
 
import java.util.List;
 
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import com.myboard.mapper.MyBoardMapper;
import com.myboard.vo.MyBoardVo;
import com.myboard.vo.Page;
 
@Service
public class MyBoardServiceImpl implements MyBoardService {
    
    @Autowired
    private MyBoardMapper mapper;
    
    private Logger log=Logger.getLogger(MyBoardServiceImpl.class);
 
    /*
    @Override
    public List<MyBoardVo> getList() {
        log.info("글 목록");
        return mapper.getList();
    }
    */
 
    @Override
    public void register(MyBoardVo board) {
        log.info("새 글 등록:"+board);
        mapper.insert(board);
        
    }
 
    @Override
    public MyBoardVo get(String id) {
        log.info("글 보기:"+id);
        return mapper.read(id);
    }
 
    @Override
    public boolean remove(String id) {
        log.info("글 삭제:"+id);
        return mapper.delete(id)==1;
    }
 
    @Override
    public boolean modify(MyBoardVo board) {
        log.info("글 수정:"+board);
        return mapper.update(board)==1;
    }
    
    @Override
    public List<MyBoardVo> getList(Page page){
        log.info("get List With Page : "+page);
        return mapper.getListWithPaging(page);
    }
    
 
    @Override
    public int getTotal() {
        return mapper.getTotal();
    }
 
}
 
 
 

 

 

 

6. 컨트롤러 계층 처리

 

기존의 /list에 대한 매핑을 주석처리 후 Page를 추가한 매핑으로 연결한다.

 

 

 

페이지에 대한 버튼 및 이에 대한 스타일을 지정해준다.

 

7. list.jsp 수정

 

 

 

 

실행하기 앞서, 데이터가 현재 16개 밖에 없으므로 시퀀스를 생성 후, 데이터를 추가해보자.

 

8. sqldeveloper 데이터 추가

 

 

 

이제 서버를 실행하면 아래와 같이 페이지에 대한 게시판을 만들 수 있게 된다.

 

728x90