반응형

페이징 처리 클래스

 

PageUtil.java

package com.zerobase.fastlms.util;

public class PageUtil {

    /**
     * 전체개수
     */
    private long totalCount;

    /**
     * 한페이지에 나오는 개수
     */
    private long pageSize = 10;

    /**
     * 페이지블럭 개수
     */
    private long pageBlockSize = 10;

    /**
     *  현재 페이지 번호
     */
    private long pageIndex;

    /**
     * 전체페이지 블럭 개수
     */
    private long totalBlockCount;

    /**
     * 시작페이지 번호
     */
    private long startPage;

    /**
     * 종료페이지 번호
     */
    private long endPage;

    /**
     * 페이지 이동시 전달되는 파라미터(쿼리스트링)
     */
    private String queryString;

    public PageUtil(long totalCount, long pageSize, long pageIndex, String queryString) {
        this.totalCount = totalCount;
        this.pageSize = pageSize;
        this.pageIndex = pageIndex;
        this.queryString = queryString;
    }

    public PageUtil(long totalCount, long pageIndex, String queryString, long pageSize, long pageBlockSize) {
        this.totalCount = totalCount;
        this.pageSize = pageSize;
        this.queryString = queryString;
        this.pageBlockSize = pageBlockSize;
        this.pageIndex = pageIndex;
    }

    public String pager() {

        init();

        StringBuilder sb = new StringBuilder();

        long previousPageIndex = startPage > 1 ? startPage - 1 : 1;
        long nextPageIndex = endPage < totalBlockCount ? endPage + 1 : totalBlockCount;

        String addQueryString = "";
        if (queryString != null && queryString.length() > 0) {
            addQueryString = "&" + queryString;
        }

        sb.append(String.format("<a href='?pageIndex=%d%s'>&lt;&lt;</a>", 1, addQueryString));
        sb.append(System.lineSeparator());
        sb.append(String.format("<a href='?pageIndex=%d%s'>&lt;</a>", previousPageIndex, addQueryString));
        sb.append(System.lineSeparator());

        for(long i = startPage; i<= endPage; i++) {
            if (i == pageIndex) {
                sb.append(String.format("<a class='on' href='?pageIndex=%d%s'>%d</a>", i, addQueryString, i));
            } else {
                sb.append(String.format("<a href='?pageIndex=%d%s'>%d</a>", i, addQueryString, i));
            }
            sb.append(System.lineSeparator());
        }

        sb.append(String.format("<a href='?pageIndex=%d%s'>&gt;</a>", nextPageIndex, addQueryString));
        sb.append(System.lineSeparator());
        sb.append(String.format("<a href='?pageIndex=%d%s'>&gt;&gt;</a>", totalBlockCount, addQueryString));
        sb.append(System.lineSeparator());

        return sb.toString();
    }

    private void init() {

        if (pageIndex < 1) {
            pageIndex = 1;
        }

        if (pageSize < 1) {
            pageSize = 1;
        }

        totalBlockCount = totalCount / pageSize + (totalCount % pageSize > 0 ? 1 : 0);

        startPage = ((pageIndex - 1) / pageBlockSize) * pageBlockSize + 1;

        endPage = startPage + pageBlockSize - 1;
        if (endPage > totalBlockCount) {
            endPage = totalBlockCount;
        }
    }
}

 

 

PageUtilTest.java

package com.zerobase.fastlms.util;

public class PageUtilTest {

    public static void main(String[] args) {

        PageUtil pageUtil = new PageUtil(151, 10, 3, "");
        String htmlPager = pageUtil.pager();

        System.out.println(htmlPager);
    }
}

 

 


페이징 처리 구현

 

MemberParam.java

 

 

AdminMemberController.java

 

 

list.html

 

 

MemberMapper.xml

 

 

MemberMapper.java

package com.zerobase.fastlms.admin.mapper;

import com.zerobase.fastlms.admin.dto.MemberDto;
import com.zerobase.fastlms.admin.model.MemberParam;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;


@Mapper
public interface MemberMapper {

    long selectListCount(MemberParam parameter);
    List<MemberDto> selectList(MemberParam parameter);

}

 

 

MemberDto.java

long totalCount;

 

 

MemberServiceImpl.java

 

 

AdminMemberController.java

 

 

MemberMapper.xml

 

 

MemberParam.java

 

 

MemberParam.java

 

 

MemberParam.java

public long getPageStart() {
    init();
    return (pageIndex - 1) * pageSize;
}

public long getPageEnd() {
    init();
    return pageSize;
}

public void init() {
    if (pageIndex < 1) {
        pageIndex = 1;
    }

    if (pageSize < 1) {
        pageSize = 10;
    }
}

 

 

 

AdminMemberController.java

 

 

list.html

 

 

AdminMemberController.java

 

 

list.html

.search-form .total-count {
    position: absolute;
    left: 0; top: 0;
    height: 20px;
    float: left;
}

 

 

 

list.html

<p class="total-count">전체 <span th:text="${totalCount}"></span>개</p>

 

 

 

list.html

 

 

 

localhost:8080/admin/member/list.do

 

 

 

MemberDto.java

package com.zerobase.fastlms.admin.dto;
import lombok.Data;

import java.time.LocalDateTime;

@Data
public class MemberDto {

    String userId;
    String userName;
    String phone;
    String password;
    LocalDateTime regDt;

    boolean emailAuthYn;
    String emailAuthKey;
    LocalDateTime emailAuthDt;

    String resetPasswordKey;
    LocalDateTime resetPasswordLimitDt;

    boolean adminYn;

//Add column
    long totalCount;
    long seq;
}

 

 

 

MemberServiceIml.java

@Override
public List<MemberDto> list(MemberParam parameter) {

    long totalCount = memberMapper.selectListCount(parameter);

    List<MemberDto> list = memberMapper.selectList(parameter);
    if (!CollectionUtils.isEmpty(list)) {
        int i = 0;
        for (MemberDto x : list) {
            x.setTotalCount(totalCount);
            x.setSeq(totalCount - parameter.getPageStart() - i);
            i++;
        }
    }
    return list;
}

 

 

 

list.html

<td th:text="${x.seq}" </td>

 

 

 

localhost:8080/admin/member/list.do

 

 

 

AdminMemberController.java

package com.zerobase.fastlms.admin;

import com.zerobase.fastlms.admin.dto.MemberDto;
import com.zerobase.fastlms.admin.model.MemberParam;
import com.zerobase.fastlms.member.service.MemberService;
import com.zerobase.fastlms.util.PageUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.List;

@RequiredArgsConstructor
@Controller
public class AdminMemberController {

    private final MemberService memberService;

    @GetMapping("/admin/member/list.do")
    public String list(Model model, MemberParam parameter) {

        parameter.init();

        List<MemberDto> members = memberService.list(parameter);

        long totalCount = 0;
        if (members != null && members.size() > 0) {
            totalCount = members.get(0).getTotalCount();
        }
        String queryString = parameter.getQueryString();

        PageUtil pageUtil = new PageUtil(
                totalCount,
                parameter.getPageSize(),
                parameter.getPageIndex(),
                queryString);

        model.addAttribute("list", members);
        model.addAttribute("totalCount", totalCount);
        model.addAttribute("pager", pageUtil.pager());

        return "admin/member/list";
    }
}

 

 

 

MemberParam.java

public String getQueryString() {
    init();

    StringBuilder sb = new StringBuilder();
    if (searchType != null && searchType.length() > 0) {
        sb.append(String.format("searchType=%s", searchType));
    }

    if (searchValue != null && searchValue.length() > 0) {
        if (sb.length() > 0) {
            sb.append("&");
        }
        sb.append(String.format("searchValue=%s", searchValue));
    }

    return sb.toString();
}

 

 

 

localhost:8080/admin/member/list.do?pageIndex=2&searchType=all&searchValue=1234

 

 

 

localhost:8080/admin/member/list.do?pageIndex=1&searchType=all&searchValue=1234

 

 


반응형

+ Recent posts