ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] 게시판 만들기(17) - 페이징(Paging) 처리
    Spring/4.3.x - 게시판 만들기 2018. 12. 19. 11:03
    반응형

    1. 페이징 처리를 위한 쿼리 추가 및 수정

    1_1) 게시물 총 개수를 구하는 쿼리 추가

     페이징 처리를 위해서는 게시물 총 개수가 필요하기 때문에 쿼리를 추가하세요.

    1
    2
    3
    4
    5
    6
    <select id="getBoardCnt" parameterType="com.spring.board.form.BoardForm" resultType="int">
     
        SELECT COUNT(*)
        FROM BOARD.TB_BOARD
     
    </select>
    cs

     

    1_2) 게시물 목록을 조회하는 쿼리 수정

     페이징 처리를 위해서는 한 페이지의 게시물 목록만 조회해야 합니다. MYSQL에서는 LIMIT ~ OFFSET을 사용하며 한 페이지의 게시물 목록만 조회할 수 있으므로  게시물 목록을 조회하는 쿼리에 LIMIT ~ OFFSET을 추가하세요. LIMIT는 게시물 목록의 수, OFFSET은 게시물을 몇 번째부터 가져올지를 정의할 수 있습니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <select id="getBoardList" parameterType="com.spring.board.form.BoardForm" resultType="com.spring.board.dto.BoardDto">
     
        SELECT *
        FROM ( 
                SELECT BOARD_SEQ 
                     , BOARD_RE_REF 
                     , BOARD_RE_LEV 
                     , BOARD_RE_SEQ 
                     , BOARD_WRITER 
                     , BOARD_SUBJECT 
                     , BOARD_CONTENT 
                     , BOARD_HITS
                     , DEL_YN 
                     , INS_USER_ID
                     , CAST( DATE_FORMAT( INS_DATE, '%Y-%m-%d %H:%i:%s' ) AS CHAR(19) ) AS INS_DATE
                     , UPD_USER_ID
                     , CAST( DATE_FORMAT( UPD_DATE, '%Y-%m-%d %H:%i:%s' ) AS CHAR(19) ) AS UPD_DATE  
               FROM BOARD.TB_BOARD
               ORDER BY BOARD_RE_REF DESC, BOARD_RE_SEQ ASC
              ) T1
        LIMIT #{limit} OFFSET #{offset}
     
    </select>
    cs

     

    boardMapper.xml

    더보기
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper  PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     
    <mapper namespace="com.spring.board.boardMapper">
         
         <select id="getBoardCnt" parameterType="com.spring.board.form.BoardForm" resultType="int">
        
            SELECT COUNT(*)
            FROM BOARD.TB_BOARD
        
        </select>
        
        <select id="getBoardList" parameterType="com.spring.board.form.BoardForm" resultType="com.spring.board.dto.BoardDto">
        
            SELECT *
            FROM ( 
                    SELECT BOARD_SEQ 
                         , BOARD_RE_REF 
                         , BOARD_RE_LEV 
                         , BOARD_RE_SEQ 
                         , BOARD_WRITER 
                         , BOARD_SUBJECT 
                         , BOARD_CONTENT 
                         , BOARD_HITS
                         , DEL_YN 
                         , INS_USER_ID
                         , CAST( DATE_FORMAT( INS_DATE, '%Y-%m-%d %H:%i:%s' ) AS CHAR(19) ) AS INS_DATE
                         , UPD_USER_ID
                         , CAST( DATE_FORMAT( UPD_DATE, '%Y-%m-%d %H:%i:%s' ) AS CHAR(19) ) AS UPD_DATE  
                   FROM BOARD.TB_BOARD
                   ORDER BY BOARD_RE_REF DESC, BOARD_RE_SEQ ASC
                  ) T1
            LIMIT #{limit} OFFSET #{offset}
        
        </select>
        
        <delete id="updateBoardHits" parameterType="com.spring.board.form.BoardForm">
        
            UPDATE BOARD.TB_BOARD 
               SET BOARD_HITS = BOARD_HITS + 1             
                 , UPD_USER_ID = 'NONMEMBER'
                 , UPD_DATE = NOW()
             WHERE BOARD_SEQ = #{board_seq}
        
        </delete>
        
        <select id="getBoardDetail" parameterType="com.spring.board.form.BoardForm" resultType="com.spring.board.dto.BoardDto">
            
            SELECT BOARD_SEQ 
                 , BOARD_RE_REF 
                 , BOARD_RE_LEV 
                 , BOARD_RE_SEQ 
                 , BOARD_WRITER 
                 , BOARD_SUBJECT 
                 , BOARD_CONTENT 
                 , BOARD_HITS
                 , DEL_YN 
                 , INS_USER_ID
                 , CAST( DATE_FORMAT( INS_DATE, '%Y-%m-%d %H:%i:%s' ) AS CHAR(19) ) AS INS_DATE
                 , UPD_USER_ID
                 , CAST( DATE_FORMAT( UPD_DATE, '%Y-%m-%d %H:%i:%s' ) AS CHAR(19) ) AS UPD_DATE  
            FROM BOARD.TB_BOARD
            WHERE BOARD_SEQ = #{board_seq}        
                  
        </select>
        
        <insert id="insertBoard" parameterType="com.spring.board.form.BoardForm">
            
            INSERT 
            INTO BOARD.TB_BOARD 
            (
                    BOARD_RE_REF
                  , BOARD_RE_LEV
                  , BOARD_RE_SEQ
                  , BOARD_WRITER
                  , BOARD_SUBJECT
                  , BOARD_CONTENT
                  , INS_USER_ID
                  , INS_DATE
                  , UPD_USER_ID
                  , UPD_DATE
            ) 
            VALUES 
            (
                  0
                , 0
                , 0
                , #{board_writer}
                , #{board_subject}
                , #{board_content}
                , 'NONMEMBER'
                , NOW() 
                , 'NONMEMBER'
                , NOW() 
            )
                
        </insert>
            
        <insert id="insertBoardFail" parameterType="com.spring.board.form.BoardForm">
        
            INSERT 
            INTO BOARD.TB_BOARD 
            (
                    BOARD_RE_REF
                  , BOARD_RE_LEV
                  , BOARD_RE_SEQ
                  , BOARD_WRITER
                  , BOARD_SUBJECT
                  , BOARD_CONTENT
                  , INS_USER_ID
                  , INS_DATE
                  , UPD_USER_ID
                  , UPD_DATE
            ) 
            VALUES 
            (
                  0
                , 0
                , 0
                , #{board_writer1}
                , #{board_subject}
                , #{board_content}
                , 'NONMEMBER'
                , NOW() 
                , 'NONMEMBER'
                , NOW() 
            )
        
        </insert>
            
        <delete id="deleteBoard" parameterType="com.spring.board.form.BoardForm">
        
            DELETE 
            FROM BOARD.TB_BOARD 
            WHERE BOARD_SEQ = #{board_seq}
        
        </delete>
        
        <delete id="updateBoard" parameterType="com.spring.board.form.BoardForm">
        
            UPDATE BOARD.TB_BOARD 
               SET BOARD_SUBJECT = #{board_subject}
                 , BOARD_CONTENT = #{board_content}
                 , UPD_USER_ID = 'NONMEMBER'
                 , UPD_DATE = NOW()
             WHERE BOARD_SEQ = #{board_seq}
        
        </delete>
        
    </mapper>
    cs

     

    2. 페이징 처리를 위한 파일 추가 및 수정

    2_1) 페이징 처리를 위한 변수 설명

    pagination : 페이징 네비게이션 결과 값을 저장할 변수

    functionName : 페이지의 번호를 클릭했을 때 호출되는 자바스크립트 함수명 또는 게시글 조회를 요청하는 함수명을 저장할 변수

    currentPageNo : 현재 화면에 출력되고 있는 페이지 번호 또는 페이지의 번호를 클릭했을 때에 번호를 저장할 변수

    countPerList : 한 화면에 출력되는 게시글의 수를 저장할 변수

    countPerPage : 한 화면에 출력되는 페이지의 수를 저장할 변수

    totalListCount : 총 게시글의 수를 저장할 변수

    totalPageCount : 총 페이지의 수를 저장할 변수

    viewFirstPage :  첫 페이지 번호를 저장할 변수

    viewLastPage : 마지막 페이지 번호를 저장할 변수 

     

     totalListCount 는 총 게시글의 수를 구하는 쿼리를 추가하여 결과 값을 저장해야 합니다. 

     totalPageCount 는 총 게시글의 수(totalListCount) / 한 화면에 출력되는 페이지의 수(countPerPage) 에 값을 저장하면 되는데, 나머지가 존재하는 경우는 1을 더해주어야 합니다. 예를 들어, 총 게시글의 수(totalListCount)가 100개이고 한 화면에 출력되는 페이지의 수(countPerPage)가 10개인 게시글을 출력하는 경우 총 게시글의 수(totalListCount)를 한 화면에 출력되는 페이지의 수(countPerPage)로 나눌 때 나머지가 존재하지 않아 게시글을 모두 출력할 수 있지만, 총 게시글의 수(totalListCount)가 95개이고 한 화면에 출력되는 페이지의 수(countPerPage)가 10개인 게시글을 출력하는 경우 총 게시글의 수(totalListCount)를 한 화면에 출력되는 페이지의 수(countPerPage)로 나눌 때 나머지 5가 존재하여 게시글을 모두 출력할 수 없습니다. 이처럼 나머지가 존재할 때는 1을 더해주어야 합니다.

    1
    2
    3
    4
    int totalPageCount = totalListCount / countPerList;
    if (totalListCount % countPerList > 0) { 
        totalPageCount = totalPageCount + 1;
    }
    cs

     

     viewFirstPage 는 (((현재 페이지 번호(currentPageNo) - 1) / 한 화면에 출력되는 페이지의 수(countPerPage)) * 한 화면에 출력되는 페이지의 수(countPerPage)) + 1에 값을 저장해야 합니다. 연산되는 내용에 1을 빼고 더하는 이유는 한 화면에 출력되는 페이지 수(countPerPage)가 10일 때 페이징 네비게이션에 출력되는 페이지 번호는 1~10, 11~20, 21~30 처럼 출력되고, 마지막 페이지의 번호(viewLastPage)를 한 화면에 출력되는 페이지의 수(countPerPage)로 나누었을 때 첫 페이지의 번호(viewFirstPage)부터 마지막 페이지의 번호(viewLastPage) 전에 번호보다 값이 1 많습니다. 그래서 한 화면에 출력되는 페이지 수(countPerPage)로 나누기 전에 1을 빼고 곱하기 전에 1을 더해주어야 합니다. 

    1
    int firstPageNo = (((currentPageNo - 1/ countPerPage) * countPerPage) + 1;
    cs

     

     viewLastPage 는 (첫 페이지 번호(viewFirstPage) + 한 화면에 출력되는 페이지 수(countPerPage)) - 1에 값을 저장해야 합니다. 첫 페이지 번호(viewFirstPage)가 1, 11, 21처럼 일의 자리가 1로 시작하므로 한 화면에 출력되는 페이지 수(countPerPage)를 더한 후 1을 빼주어야 합니다. 그리고 마지막 페이지 번호(viewLastPage)에 경우 총 페이지의 수(totalPageCount)를 고려해야 되는데요. 예를 들어, 총 게시글 수(totalListCount)가 150개인 경우 총 페이지의 수(totalPageCount)는 15가 되고, 마지막 페이지 번호(viewLastPage)는 10과 20입니다. 이처럼 마지막 페이번 번호(ViewLastPage)가 총 페이지 번호(totalPageCount)보다 큰 경우는 16~20 페이지에는 출력할 수 있는 게시글이 없기 때문에 마지막 페이지 번호(viewLastPage)에 총 페이지 번호(totalPageCount)를 저장해야 합니다.  

    1
    2
    3
    4
    int viewLastPage= firstPageNo + countPerPage - 1;
    if (viewLastPage> totalPageCount) {
        viewLastPage= totalPageCount;
    }
    cs

     

    totalFirstPage : 전체 페이지 중에 처음 페이지 번호를 저장할 변수

    totalLastPage : 전체 페이지 중에 마지막 페이지 번호를 저장할 변수

    prePerPage : 이전 페이지 네이게이션 중에 처음 페이지 번호를 저장할 변수

    nextPerPage : 다음 페이지 네비게이션 중에 처음 페이지 번호를 저장할 변수

      페이지 번호를 설정하는 부분은 첫 페이지 번호, 마지막 페이지 번호만 알고 있다면 for을 사용하여 구현할 수 있습니다. for문 안에 if문은 현재 페이지 번호에 스타일을 추가하기 위해 추가했습니다. a태그 구현 시에 functionName을 추가한 것은 페이지 번호를 클릭 시에 게시판 조회 함수를 호출하기 위해 추가했습니다. 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    pagination += "<a href='javascript:" + functionName + "(\"" + totalFirstPage + "\");' class=\"direction_left01\">[<<]</a>";
    pagination += "<a href='javascript:" + functionName + "(" + prePerPage + ");' class=\"direction_left01\">[<]</a>";
    for (int a = viewFirstPage; a <= ViewLastPage; a++) {
        if (a == currentPage) {
            pagination += "<a href='javascript:" + functionName + "(\"" + a + "\");' class='onpage'>[" + a + "]</a>";
        } else {
            pagination += "<a href='javascript:" + functionName + "(\"" + a + "\");'>[" + a + "]</a>";
        }
    }
    pagination += "<a href='javascript:" + functionName + "(" + nextPerPage + ");' class=\"direction_right01\">[>]</a>";
    pagination += "<a href='javascript:" + functionName + "(" + totalLastPage + ");' class=\"direction_right01\">[>>]</a>";
    cs

     

    2_2) PagingUtil.Java 추가 

    com.spring.board.common 패키지 밑에 페이징 처리를 위한 PagingUtil.java 추가하세요.

    PagingUtil.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.spring.board.common;
     
    import com.spring.board.dto.CommonDto;
    import com.spring.board.form.CommonForm;
     
    /**
     * 페이지 네비게이션 정보 설정을 위한 클래스
     */
    public class PagingUtil {
     
        public static CommonDto setPageUtil(CommonForm commonForm) {
     
            CommonDto commonDto = new CommonDto();
     
            String pagination = ""// 페이징 결과 값
            String functionName = commonForm.getFunction_name(); // 페이징 목록을 요청하는 자바스크립트 함수명
            int currentPage = commonForm.getCurrent_page_no(); // 현재 페이지 번호
            int countPerList = commonForm.getCount_per_list(); // 한 화면에 출력될 게시물 수
            int countPerPage = commonForm.getCount_per_page(); // 한 화면에 출력될 페이지 수
            int totalListCount = commonForm.getTatal_list_count(); // 총 게시물 수
            int totalPageCount = totalListCount / countPerList; // 총 페이지 수
            if (totalListCount % countPerList > 0) { // 총 페이수를 구할 때 int형으로 계산하면 나머지가 있는 경우 게시물이 존재하기 때문에 총 페이지의 수를 수정
                totalPageCount = totalPageCount + 1;
            }
     
            int viewFirstPage = (((currentPage - 1/ countPerPage) * countPerPage) + 1// 한 화면에 첫 페이지 번호
            int ViewLastPage = viewFirstPage + countPerPage - 1// 한 화면에 마지막 페이지 번호
            if (ViewLastPage > totalPageCount) { // 마지막 페이지의 수가 총 페이지의 수보다 큰 경우는 게시물이 존재하지 않기 때문에 마지막 페이지의 수를 수정
                ViewLastPage = totalPageCount;
            }
     
            int totalFirstPage = 1// 전체 페이지 중에 처음 페이지
            int totalLastPage = totalPageCount; // 전체 페이지 중에 마지막 페이지
            int prePerPage = 0// 이전 화면에 첫번째 번호
            if (viewFirstPage - countPerPage > 0) {
                prePerPage = viewFirstPage - countPerPage;
            } else {
                prePerPage = totalFirstPage;
            }
            int nextPerPage = 0// 이후 화면에 첫번째 번호
            if (viewFirstPage + countPerPage < totalPageCount) {
                nextPerPage = viewFirstPage + countPerPage;
            } else {
                nextPerPage = totalPageCount;
            }
     
            // 페이지 네이게이션 설정
            pagination += "<div class='pagination'>";
            pagination += "<a href='javascript:" + functionName + "(\"" + totalFirstPage + "\");' class=\"direction_left01\">[<<]</a>";
            pagination += "<a href='javascript:" + functionName + "(" + prePerPage + ");' class=\"direction_left01\">[<]</a>";
            for (int a = viewFirstPage; a <= ViewLastPage; a++) {
                if (a == currentPage) {
                    pagination += "<a href='javascript:" + functionName + "(\"" + a + "\");' class='onpage'>[" + a + "]</a>";
                } else {
                    pagination += "<a href='javascript:" + functionName + "(\"" + a + "\");'>[" + a + "]</a>";
                }
            }
            pagination += "<a href='javascript:" + functionName + "(" + nextPerPage + ");' class=\"direction_right01\">[>]</a>";
            pagination += "<a href='javascript:" + functionName + "(" + totalLastPage + ");' class=\"direction_right01\">[>>]</a>";
            pagination += "</div>";
     
            int offset = ((currentPage - 1* countPerList); // 한 화면의 표출되는 게시물의 시작 번호 (쿼리 조건절)
     
            // LIMIT는 가져올 row의 수, OFFSET은 몇 번째 row부터 가져올지를 결정
            commonDto.setLimit(countPerList);
            commonDto.setOffset(offset);
            commonDto.setPagination(pagination);
     
            return commonDto;
        }
    }
     
    cs
     
     2_3) CommonForm.java, CommonDto.java 추가

    - com.spring.board.dto.common 패키지 밑에 CommonForm.java 추가하세요.

    - com.spring.board.dto.common 패키지 밑에 CommonDto.java 추가하세요.

    CommonForm.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
    73
    74
    75
    76
    77
    package com.spring.board.form;
     
    public class CommonForm {
     
        String function_name;
        int current_page_no;
        int count_per_page;
        int count_per_list;
        int tatal_page_count;
        int tatal_list_count;
        int limit;
        int offset;
     
        public String getFunction_name() {
            return function_name;
        }
     
        public void setFunction_name(String function_name) {
            this.function_name = function_name;
        }
     
        public int getCurrent_page_no() {
            return current_page_no;
        }
     
        public void setCurrent_page_no(int current_page_no) {
            this.current_page_no = current_page_no;
        }
     
        public int getCount_per_page() {
            return count_per_page;
        }
     
        public void setCount_per_page(int count_per_page) {
            this.count_per_page = count_per_page;
        }
     
        public int getCount_per_list() {
            return count_per_list;
        }
     
        public void setCount_per_list(int count_per_list) {
            this.count_per_list = count_per_list;
        }
     
        public int getTatal_page_count() {
            return tatal_page_count;
        }
     
        public void setTatal_page_count(int tatal_page_count) {
            this.tatal_page_count = tatal_page_count;
        }
     
        public int getTatal_list_count() {
            return tatal_list_count;
        }
     
        public void setTatal_list_count(int tatal_list_count) {
            this.tatal_list_count = tatal_list_count;
        }
     
        public int getLimit() {
            return limit;
        }
     
        public void setLimit(int limit) {
            this.limit = limit;
        }
     
        public int getOffset() {
            return offset;
        }
     
        public void setOffset(int offset) {
            this.offset = offset;
        }
    }
    cs

     

    CommonDto.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
    package com.spring.board.dto;
     
    public class CommonDto {
     
        int limit;
        int offset;
        String pagination;
     
        public int getLimit() {
            return limit;
        }
     
        public void setLimit(int limit) {
            this.limit = limit;
        }
     
        public int getOffset() {
            return offset;
        }
     
        public void setOffset(int offset) {
            this.offset = offset;
        }
     
        public String getPagination() {
            return pagination;
        }
     
        public void setPagination(String pagination) {
            this.pagination = pagination;
        }
    }
    cs
     
    2_4) BoardForm.java, BoardDto.java 수정

    BoardForm.java는 CommonForm.java를 BoardDto.java는 CommonDto.java를 상속받도록 수정하세요.

    BoardForm.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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    package com.spring.board.form;
     
    import java.util.Date;
     
    public class BoardForm extends CommonForm {
     
        int board_seq;
        int board_re_ref;
        int board_re_lev;
        int board_re_seq;
        String board_writer;
        String board_subject;
        String board_content;
        int board_hits;
        String del_yn;
        String ins_user_id;
        Date ins_date;
        String upd_user_id;
        Date upd_date;
        String search_type;
     
        public int getBoard_seq() {
            return board_seq;
        }
     
        public void setBoard_seq(int board_seq) {
            this.board_seq = board_seq;
        }
     
        public int getBoard_re_ref() {
            return board_re_ref;
        }
     
        public void setBoard_re_ref(int board_re_ref) {
            this.board_re_ref = board_re_ref;
        }
     
        public int getBoard_re_lev() {
            return board_re_lev;
        }
     
        public void setBoard_re_lev(int board_re_lev) {
            this.board_re_lev = board_re_lev;
        }
     
        public int getBoard_re_seq() {
            return board_re_seq;
        }
     
        public void setBoard_re_seq(int board_re_seq) {
            this.board_re_seq = board_re_seq;
        }
     
        public String getBoard_writer() {
            return board_writer;
        }
     
        public void setBoard_writer(String board_writer) {
            this.board_writer = board_writer;
        }
     
        public String getBoard_subject() {
            return board_subject;
        }
     
        public void setBoard_subject(String board_subject) {
            this.board_subject = board_subject;
        }
     
        public String getBoard_content() {
            return board_content;
        }
     
        public void setBoard_content(String board_content) {
            this.board_content = board_content;
        }
     
        public int getBoard_hits() {
            return board_hits;
        }
     
        public void setBoard_hits(int board_hits) {
            this.board_hits = board_hits;
        }
     
        public String getDel_yn() {
            return del_yn;
        }
     
        public void setDel_yn(String del_yn) {
            this.del_yn = del_yn;
        }
     
        public String getIns_user_id() {
            return ins_user_id;
        }
     
        public void setIns_user_id(String ins_user_id) {
            this.ins_user_id = ins_user_id;
        }
     
        public Date getIns_date() {
            return ins_date;
        }
     
        public void setIns_date(Date ins_date) {
            this.ins_date = ins_date;
        }
     
        public String getUpd_user_id() {
            return upd_user_id;
        }
     
        public void setUpd_user_id(String upd_user_id) {
            this.upd_user_id = upd_user_id;
        }
     
        public Date getUpd_date() {
            return upd_date;
        }
     
        public void setUpd_date(Date upd_date) {
            this.upd_date = upd_date;
        }
     
        public String getSearch_type() {
            return search_type;
        }
     
        public void setSearch_type(String search_type) {
            this.search_type = search_type;
        } 
    }
    cs

    BoardDto.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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    package com.spring.board.dto;
     
    public class BoardDto extends CommonDto {
     
        int board_seq;
        int board_re_ref;
        int board_re_lev;
        int board_re_seq;
        String board_writer;
        String board_subject;
        String board_content;
        int board_hits;
        String del_yn;
        String ins_user_id;
        String ins_date;
        String upd_user_id;
        String upd_date;
     
        String result;
     
        public int getBoard_seq() {
            return board_seq;
        }
     
        public void setBoard_seq(int board_seq) {
            this.board_seq = board_seq;
        }
     
        public int getBoard_re_ref() {
            return board_re_ref;
        }
     
        public void setBoard_re_ref(int board_re_ref) {
            this.board_re_ref = board_re_ref;
        }
     
        public int getBoard_re_lev() {
            return board_re_lev;
        }
     
        public void setBoard_re_lev(int board_re_lev) {
            this.board_re_lev = board_re_lev;
        }
     
        public int getBoard_re_seq() {
            return board_re_seq;
        }
     
        public void setBoard_re_seq(int board_re_seq) {
            this.board_re_seq = board_re_seq;
        }
     
        public String getBoard_writer() {
            return board_writer;
        }
     
        public void setBoard_writer(String board_writer) {
            this.board_writer = board_writer;
        }
     
        public String getBoard_subject() {
            return board_subject;
        }
     
        public void setBoard_subject(String board_subject) {
            this.board_subject = board_subject;
        }
     
        public String getBoard_content() {
            return board_content;
        }
     
        public void setBoard_content(String board_content) {
            this.board_content = board_content;
        }
     
        public int getBoard_hits() {
            return board_hits;
        }
     
        public void setBoard_hits(int board_hits) {
            this.board_hits = board_hits;
        }
     
        public String getDel_yn() {
            return del_yn;
        }
     
        public void setDel_yn(String del_yn) {
            this.del_yn = del_yn;
        }
     
        public String getIns_user_id() {
            return ins_user_id;
        }
     
        public void setIns_user_id(String ins_user_id) {
            this.ins_user_id = ins_user_id;
        }
     
        public String getIns_date() {
            return ins_date;
        }
     
        public void setIns_date(String ins_date) {
            this.ins_date = ins_date;
        }
     
        public String getUpd_user_id() {
            return upd_user_id;
        }
     
        public void setUpd_user_id(String upd_user_id) {
            this.upd_user_id = upd_user_id;
        }
     
        public String getUpd_date() {
            return upd_date;
        }
     
        public void setUpd_date(String upd_date) {
            this.upd_date = upd_date;
        }
     
        public String getResult() {
            return result;
        }
     
        public void setResult(String result) {
            this.result = result;
        }
    }
    cs
     
    2_5) BoardDao.java 수정
    boardMapper.xml에 추가한 getBoardCnt를 호출하는 메소드를 추가하세요.
    BoardDao.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
    package com.spring.board.dao;
     
    import java.util.List;
     
    import javax.annotation.Resource;
     
    import org.apache.ibatis.session.SqlSession;
    import org.springframework.stereotype.Repository;
     
    import com.spring.board.dto.BoardDto;
    import com.spring.board.form.BoardForm;
     
    @Repository
    public class BoardDao {
     
        @Resource(name = "sqlSession")
        private SqlSession sqlSession;
     
        private static final String NAMESPACE = "com.spring.board.boardMapper";
     
        /** 게시판 - 목록 수 */
        public int getBoardCnt(BoardForm boardForm) throws Exception {
     
            return sqlSession.selectOne(NAMESPACE + ".getBoardCnt", boardForm);
        }
        
        /** 게시판 - 목록 조회  */
        public List<BoardDto> getBoardList(BoardForm boardForm) throws Exception {
            
            return sqlSession.selectList(NAMESPACE + ".getBoardList", boardForm);
        }
        
        /** 게시판 - 조회 수 수정  */
        public int updateBoardHits(BoardForm boardForm) throws Exception {
            
            return sqlSession.update(NAMESPACE + ".updateBoardHits", boardForm);
        }
        
        /** 게시판 - 상세 조회  */
        public BoardDto getBoardDetail(BoardForm boardForm) throws Exception {
            
            return sqlSession.selectOne(NAMESPACE + ".getBoardDetail", boardForm);
        }
        
        /** 게시판 - 등록  */    
        public int insertBoard(BoardForm boardForm) throws Exception {
            return sqlSession.insert(NAMESPACE + ".insertBoard", boardForm);
        }
     
        /** 게시판 - 등록 실패(트랜잭션 테스트)  */    
        public int insertBoardFail(BoardForm boardForm) throws Exception {
            return sqlSession.insert(NAMESPACE + ".insertBoardFail", boardForm);
        }
        
        /** 게시판 - 삭제  */
        public int deleteBoard(BoardForm boardForm) throws Exception {
            
            return sqlSession.delete(NAMESPACE + ".deleteBoard", boardForm);
        }
        
        /** 게시판 - 수정  */
        public int updateBoard(BoardForm boardForm) throws Exception {
            
            return sqlSession.update(NAMESPACE + ".updateBoard", boardForm);
        }
    }
    cs

     

    2_6) ResultUtil.java 추가
    여러 개의 결과 값을 리턴하기 위한 클래스를 추가하세요.
    ResultUtil.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
    package com.spring.board.common;
     
    /**
     * 여러 개의 결과 값을 리턴하기 위한 클래스 (성공 유무, 메세지, 조회 내용 등)
     */
    public class ResultUtil {  
     
        private String state = "FAIL";    
        private String msg    = "";
        private Object data = "";
        
        public String getState() {
            return state;
        }
            
        public void setState(String state) {
            this.state = state;
        }    
        
        public String getMsg() {
            return msg;
        }
     
        public void setMsg(String msg) {
            this.msg = msg;
        }
     
        public Object getData() {
            return data;
        }
        
        public void setData(Object data) {
            this.data = data;
        }    
    }
    cs

     

    2_7) BoardController.java, BoardService.java 수정 
    페이징 처리에 한 내용을 ResultUtil.java에 담아서 응답하기 위해 BoardController.java, BoardService.java 수정를 수정하세요.
    BoardController.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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    package com.spring.board.controller;
     
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
     
    import com.spring.board.common.ResultUtil;
    import com.spring.board.dto.BoardDto;
    import com.spring.board.form.BoardForm;
    import com.spring.board.service.BoardService;
     
    @Controller
    @RequestMapping(value = "/board")
    public class BoardController {
     
        @Autowired
        private BoardService boardService;
     
        /** 게시판 - 목록 페이지 이동 */
        @RequestMapping( value = "/boardList")
        public String boardList(HttpServletRequest request, HttpServletResponse response) throws Exception{
            
            return "board/boardList";
        }
            
        /** 게시판 - 목록 조회  */
        @RequestMapping(value = "/getBoardList")
        @ResponseBody
        public ResultUtil getBoardList(HttpServletRequest request, HttpServletResponse response, BoardForm boardForm) throws Exception {
     
            ResultUtil resultUtils = boardService.getBoardList(boardForm);
     
            return resultUtils;
        }
        
        /** 게시판 - 상세 페이지 이동 */
        @RequestMapping( value = "/boardDetail")
        public String boardDetail(HttpServletRequest request, HttpServletResponse response) throws Exception{
            
            return "board/boardDetail";
        }    
        
        /** 게시판 - 상세 조회  */
        @RequestMapping(value = "/getBoardDetail")
        @ResponseBody
        public BoardDto getBoardDetail(HttpServletRequest request, HttpServletResponse response, BoardForm boardForm) throws Exception {
     
            BoardDto boardDto = boardService.getBoardDetail(boardForm);
     
            return boardDto;
        }
        
        /** 게시판 - 작성 페이지 이동 */
        @RequestMapping( value = "/boardWrite")
        public String boardWrite(HttpServletRequest request, HttpServletResponse response) throws Exception{
            
            return "board/boardWrite";
        }
        
        /** 게시판 - 등록 */
        @RequestMapping( value = "/insertBoard")
        @ResponseBody
        public BoardDto insertBoard(HttpServletRequest request, HttpServletResponse response, BoardForm boardForm) throws Exception{
            
            BoardDto boardDto = boardService.insertBoard(boardForm);
            
            return boardDto;
        }
        
        /** 게시판 - 삭제 */
        @RequestMapping( value = "/deleteBoard")
        @ResponseBody
        public BoardDto deleteBoard(HttpServletRequest request, HttpServletResponse response, BoardForm boardForm) throws Exception{
            
            BoardDto boardDto = boardService.deleteBoard(boardForm);
            
            return boardDto;
        }
        
        /** 게시판 - 수정 페이지 이동 */
        @RequestMapping( value = "/boardUpdate")
        public String boardUpdate(HttpServletRequest request, HttpServletResponse response) throws Exception{
            
            return "board/boardUpdate";
        }
        
        /** 게시판 - 수정 */
        @RequestMapping( value = "/updateBoard")
        @ResponseBody
        public BoardDto updateBoard(HttpServletRequest request, HttpServletResponse response, BoardForm boardForm) throws Exception{
            
            BoardDto boardDto = boardService.updateBoard(boardForm);
            
            return boardDto;
        }
    }
    cs
    BoardService.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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    package com.spring.board.service;
     
    import java.util.HashMap;
    import java.util.List;
     
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
     
    import com.spring.board.common.PagingUtil;
    import com.spring.board.common.ResultUtil;
    import com.spring.board.dao.BoardDao;
    import com.spring.board.dto.BoardDto;
    import com.spring.board.dto.CommonDto;
    import com.spring.board.form.BoardForm;
    import com.spring.board.form.CommonForm;
     
    @Service()
    public class BoardService {
     
        @Autowired
        private BoardDao boardDao;
     
        /** 게시판 - 목록 조회 */
        public ResultUtil getBoardList(BoardForm boardForm) throws Exception {
     
            ResultUtil resultUtil = new ResultUtil();
     
            CommonDto commonDto = new CommonDto();
     
            int totalCount = boardDao.getBoardCnt(boardForm);
            if (totalCount != 0) {
                CommonForm commonForm = new CommonForm();
                commonForm.setFunction_name(boardForm.getFunction_name());
                commonForm.setCurrent_page_no(boardForm.getCurrent_page_no());
                commonForm.setCount_per_page(10);
                commonForm.setCount_per_list(10);
                commonForm.setTatal_list_count(totalCount);
                commonDto = PagingUtil.setPageUtil(commonForm);
            }
     
            boardForm.setLimit(commonDto.getLimit());
            boardForm.setOffset(commonDto.getOffset());
     
            List<BoardDto> list = boardDao.getBoardList(boardForm);
     
            HashMap<String, Object> resultMap = new HashMap<String, Object>();
            resultMap.put("list", list);
            resultMap.put("totalCount", totalCount);
            resultMap.put("pagination", commonDto.getPagination());
     
            resultUtil.setData(resultMap);
            resultUtil.setState("SUCCESS");
     
            return resultUtil;
        }
     
        /** 게시판 - 상세 조회 */
        public BoardDto getBoardDetail(BoardForm boardForm) throws Exception {
     
            BoardDto boardDto = new BoardDto();
     
            String searchType = boardForm.getSearch_type();
     
            if ("S".equals(searchType)) {
     
                int updateCnt = boardDao.updateBoardHits(boardForm);
     
                if (updateCnt > 0) {
                    boardDto = boardDao.getBoardDetail(boardForm);
                }
     
            } else {
     
                boardDto = boardDao.getBoardDetail(boardForm);
            }
     
            return boardDto;
        }
     
        /** 게시판 - 등록 */
        public BoardDto insertBoard(BoardForm boardForm) throws Exception {
     
            BoardDto boardDto = new BoardDto();
     
            int insertCnt = 0;
            
            insertCnt = boardDao.insertBoard(boardForm);
            
            insertCnt = boardDao.insertBoardFail(boardForm);
     
            if (insertCnt > 0) {
                boardDto.setResult("SUCCESS");
            } else {
                boardDto.setResult("FAIL");
            }
     
            return boardDto;
        }
     
        /** 게시판 - 삭제 */
        public BoardDto deleteBoard(BoardForm boardForm) throws Exception {
     
            BoardDto boardDto = new BoardDto();
     
            int deleteCnt = boardDao.deleteBoard(boardForm);
     
            if (deleteCnt > 0) {
                boardDto.setResult("SUCCESS");
            } else {
                boardDto.setResult("FAIL");
            }
     
            return boardDto;
        }
     
        /** 게시판 - 수정 */
        public BoardDto updateBoard(BoardForm boardForm) throws Exception {
     
            BoardDto boardDto = new BoardDto();
     
            int deleteCnt = boardDao.updateBoard(boardForm);
     
            if (deleteCnt > 0) {
                boardDto.setResult("SUCCESS");
            } else {
                boardDto.setResult("FAIL");
            }
     
            return boardDto;
        }
    }
    cs

     

    2_8) boardList.jsp 수정
    페이징 처리에 대한 내용을 구현하기 위해 boardList.jsp를 수정하세요.  
    boardList.jsp

    더보기
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>게시판 목록</title>
     
    <!-- 공통 CSS -->
    <link rel="stylesheet" type="text/css" href="/css/common/common.css"/>
     
    <!-- 공통 JavaScript -->
    <script type="text/javascript" src="/js/common/jquery.js"></script>
    <script type="text/javascript">
     
        $(document).ready(function(){    
            getBoardList();
        });        
        
        /** 게시판 - 상세 페이지 이동 */
        function goBoardDetail(boardSeq){                
            location.href = "/board/boardDetail?boardSeq="+ boardSeq;
        }
        
        /** 게시판 - 작성 페이지 이동 */
        function goBoardWrite(){        
            location.href = "/board/boardWrite";
        }
     
        /** 게시판 - 목록 조회  */
        function getBoardList(currentPageNo){
     
            if(currentPageNo === undefined){
                currentPageNo = "1";
            }
            
            $("#current_page_no").val(currentPageNo);
            
            $.ajax({    
            
                url      : "/board/getBoardList",
                data     : $("#boardForm").serialize(),
                dataType : "JSON",
                cache    : false,
                async    : true,
                type     : "POST",    
                success  : function(obj) {
                    getBoardListCallback(obj);                
                },           
                error     : function(xhr, status, error) {}
                
             });
        }
        
        /** 게시판 - 목록 조회  콜백 함수 */
        function getBoardListCallback(obj){
            
            var state = obj.state;        
            if(state == "SUCCESS"){
                
                var data = obj.data;            
                var list = data.list;
                var listLen = list.length;        
                var totalCount = data.totalCount;
                var pagination = data.pagination;
                        
                var str = "";
                
                if(listLen >  0){
                    
                    for(var a=0; a<listLen; a++){
                        
                        var boardSeq        = list[a].board_seq; 
                        var boardReRef      = list[a].board_re_ref; 
                        var boardReLev      = list[a].board_re_lev; 
                        var boardReSeq      = list[a].board_re_seq; 
                        var boardWriter     = list[a].board_writer; 
                        var boardSubject    = list[a].board_subject; 
                        var boardContent    = list[a].board_content; 
                        var boardHits       = list[a].board_hits;
                        var delYn           = list[a].del_yn; 
                        var insUserId       = list[a].ins_user_id;
                        var insDate         = list[a].ins_date; 
                        var updUserId       = list[a].upd_user_id;
                        var updDate         = list[a].upd_date;
                        
                        str += "<tr>";
                        str += "<td>"+ boardSeq +"</td>";
                        str += "<td onclick='javascript:goBoardDetail("+ boardSeq +");' style='cursor:Pointer'>"+ boardSubject +"</td>";
                        str += "<td>"+ boardHits +"</td>";
                        str += "<td>"+ boardWriter +"</td>";    
                        str += "<td>"+ insDate +"</td>";    
                        str += "</tr>";
                        
                    } 
                    
                } else {
                    
                    str += "<tr>";
                    str += "<td colspan='5'>등록된 글이 존재하지 않습니다.</td>";
                    str += "<tr>";
                }
                
                $("#tbody").html(str);
                $("#total_count").text(totalCount);
                $("#pagination").html(pagination);
            }
        }
        
    </script>
    </head>
    <body>
    <div id="wrap">
        <div id="container">
            <div class="inner">        
                <h2>게시글 목록</h2>            
                <form id="boardForm" name="boardForm">
                    <input type="hidden" id="function_name" name="function_name" value="getBoardList" />
                    <input type="hidden" id="current_page_no" name="current_page_no" value="1" />
                    
                    <div class="page_info">
                        <span class="total_count"><strong>전체</strong> : <span id="total_count" class="t_red">0</span></span>
                    </div>
                    
                    <table width="100%" class="table01">
                        <colgroup>
                            <col width="10%" />
                            <col width="25%" />
                            <col width="10%" />
                            <col width="15%" />
                            <col width="20%" />
                        </colgroup>
                        <thead>        
                            <tr>
                                <th>글번호</th>
                                <th>제목</th>
                                <th>조회수</th>
                                <th>작성자</th>
                                <th>작성일</th>
                            </tr>
                        </thead>
                        <tbody id="tbody">
                        
                        </tbody>    
                    </table>
                </form>            
                <div class="btn_right mt15">
                    <button type="button" class="btn black mr5" onclick="javascript:goBoardWrite();">작성하기</button>
                </div>
            </div>
            
            <div id="pagination"></div>
            
        </div>
    </div>
    </body>
    </html>
    cs

     

    3. 페이징 처리 확인 

     

    소스 코드는 Github Repository - https://github.com/tychejin1218/board_v1 (branch : section17)를 참조하세요.
    Github에서 프로젝트 가져오기 - https://tychejin.tistory.com/33

     

     

    반응형

    댓글

Designed by Tistory.