페이징 처리 클래스
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'><<</a>", 1, addQueryString));
sb.append(System.lineSeparator());
sb.append(String.format("<a href='?pageIndex=%d%s'><</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'>></a>", nextPageIndex, addQueryString));
sb.append(System.lineSeparator());
sb.append(String.format("<a href='?pageIndex=%d%s'>>></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;
}
}
}
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);
}
}
페이징 처리 구현
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);
}
long totalCount;
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;
}
}
.search-form .total-count {
position: absolute;
left: 0; top: 0;
height: 20px;
float: left;
}
<p class="total-count">전체 <span th:text="${totalCount}"></span>개</p>
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;
}
@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;
}
<td th:text="${x.seq}" </td>
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";
}
}
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();
}
'cs > java-spring-boot' 카테고리의 다른 글
[Zero-base] 7-7. 회원 상태 및 비밀번호 초기화 구현 (0) | 2022.02.24 |
---|---|
[Zero-base] 7-6. 회원 상세 목록 구현 (0) | 2022.02.24 |
[Zero-base] 7-4. 회원 검색 기능 구현 (0) | 2022.02.24 |
[Zero-base] 7-3. MyBatis 설정 및 쿼리 구현 (0) | 2022.02.24 |
[Zero-base] 7-2. 회원 목록 구현 (0) | 2022.02.23 |