JAVA

페이징 처리 내용 2

Stater 2024. 6. 16. 22:19

 

페이지 처리 내용

설명
  • UserMapper: MyBatis 매퍼 인터페이스에서는 ROWNUM을 사용하여 특정 범위의 데이터를 가져오는 메서드를 정의합니다.
  • UserService: Service 클래스에서는 페이지 번호와 페이지 크기를 이용하여 시작 번호와 끝 번호를 계산하여 MyBatis 매퍼를 호출합니다.
  • UserController: 컨트롤러에서는 요청된 페이지 번호에 따라 데이터를 조회하고, JSP에 전달할 데이터를 설정합니다.
  • user-list.jsp: 받은 데이터를 테이블로 표시하고, 데이터가 없을 경우 "데이터가 없습니다." 메시지를 출력합니다. 이전 페이지와 다음 페이지를 제어하는 링크를 생성하여 사용자가 페이지를 이동할 수 있습니다.
이 방법을 사용하면 전체 데이터의 개수를 구하지 않고도 간단히 페이지 단위로 데이터를 가져올 수 있습니다. 페이지마다 정확히 10개씩 데이터를 가져오며, 사용자가 이전 버튼과 다음 버튼을 통해 페이지를 이동할 수 있습니다.

 

인터페이스

// UserMapper.java
@Mapper
public interface UserMapper {

    List<User> getUsersWithPagination(@Param("start") int start, @Param("end") int end);
}

 

서비스

// UserService.java
@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public List<User> getUsersByPage(int page, int pageSize) {
        int start = (page - 1) * pageSize + 1;
        int end = start + pageSize - 1;
        return userMapper.getUsersWithPagination(start, end);
    }
}

 

 

컨트롤러

// UserController.java
@Controller
public class UserController {

    @Autowired
    private UserService userService;

    private static final int PAGE_SIZE = 10;

    @GetMapping("/users")
    public String getUsers(@RequestParam(name = "page", defaultValue = "1") int page, Model model) {
        List<User> users = userService.getUsersByPage(page, PAGE_SIZE);

        model.addAttribute("users", users);
        model.addAttribute("currentPage", page);

        return "user-list";
    }
}

 

제이에스피 부분

<!-- user-list.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
    <title>User List</title>
</head>
<body>
    <h1>User List</h1>
    
    <table border="1">
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>Email</th>
            </tr>
        </thead>
        <tbody>
            <c:forEach items="${users}" var="user">
                <tr>
                    <td>${user.id}</td>
                    <td>${user.name}</td>
                    <td>${user.email}</td>
                </tr>
            </c:forEach>
        </tbody>
    </table>
    
    <br>
    
    <c:if test="${empty users}">
        <p>데이터가 없습니다.</p>
    </c:if>
    
    <br>
    
    <c:if test="${currentPage > 1}">
        <a href="?page=${currentPage - 1}">이전</a>
    </c:if>
    
    <!-- 다음 페이지 링크를 제어하기 위해 users의 크기가 페이지 크기와 같을 때만 다음 링크를 생성합니다 -->
    <c:if test="${not empty users && users.size() == 10}">
        <a href="?page=${currentPage + 1}">다음</a>
    </c:if>
    
</body>
</html>

 

반응형

'JAVA' 카테고리의 다른 글

페이징 처리 내용  (0) 2024.06.16
Chpter01. 변수  (0) 2023.03.07
Chapter01. 변수  (0) 2023.02.23
멀티쓰레드 프로그래밍 multi-thread programming  (0) 2019.10.29
멀티쓰레드 프로그래밍 multi-thread programming  (0) 2019.10.28