AI딥러닝/SporingBoot

스프링부트 엔티티와 인터페이스로 페이징 처리기술

Ystory96 2026. 1. 10. 13:29

스프링 부트로 홈페이지 맨 아래 페이지 나타내기

1. 엔티티 페이징 처리하기

(1) 입력하려는 데이터의 엔티티 만들기

@Entity @NoArgsConstructor
@Builder
@Setter  @Getter
@Table(name="inter0525")
public class InterEntity {
    @Id
    @Column
    String name;
    @Column
    String tel;
    @Column
    String jumin;
    @Column
    String address;

 

(2) 컨트롤러에서 출력시 엔터티 형식으로 인터페이스로 보내기

@GetMapping("/out")
public String out(Model model, @RequestParam (required = false, defaultValue = "0", value = "page")int page) {
    // 페이징 처리
    Page<InterEntity> listPage = interService.list(page);
    int totalPage = listPage.getTotalPages();//전체 데이타수를 3으로 나눈 페이지수 를 올림
    int nowpage = listPage.getPageable().getPageNumber() + 1;//현재페이지//
    model.addAttribute("nowpage", nowpage);
    model.addAttribute("list", listPage.getContent());
    model.addAttribute("totalPage", totalPage);
    //
    return "out";
}

 

(3) 인터페이스 구현체에서 페이지 3개씩 가져와서 다시 컨트롤러로 이동

@Override
public Page<InterEntity> list(int page) {
    return interRepository.findAll(PageRequest.of(page,3, Sort.by(Sort.Direction.ASC, "name")));
}

 

 

(4) out.template에서 아래 페이징 처리 코딩 넣고 @{/해당템플릿이름} 타임리프 형식으로 이름 수정하기

<!-- 페이징 처리 -->
<!--3.1 버젼-->
<div class="pagination">
    <ul>
        <li th:each="page, stat : ${#numbers.sequence(0, totalPage - 1)}">

  <span th:if="${nowpage == stat.index + 1}" >
    <a th:href="@{/memberOut(page=${stat.index})}"
       th:text="${stat.index + 1}" style="color:red" ></a>
  </span>

            <span th:if="${nowpage != stat.index + 1}">
    <a th:href="@{/memberOut(page=${stat.index})}"
       th:text="${stat.index + 1}"></a>
  </span>

 

 

2. 인터페이스로 페이징 처리하기

 

(1) 입력하려는 데이터의 인터페이스 만들기

public interface InterInterface {
    String getName();
    String getTel();
    String getJumin();
    String getAddress();
    //나이와 성별 추가사항
    int getAge();
    String getSb();
}

 

(2) 컨트롤러에서 출력시 인터페이스 형식으로 구현하려는 인터페이스로 보내기

@GetMapping("/out2")
public String out2(
        @RequestParam(name="page", defaultValue = "0") int page,
        Model model) {
    Page<InterInterface> listPage = interService.allout21(page);

        model.addAttribute("nowPage", listPage.getNumber()+1);
        model.addAttribute("list", listPage.getContent());
       // model.addAttribute("page", listPage);   // ⭐ Page 객체 그대로 전달
        model.addAttribute("totalPage", listPage.getTotalPages());
        return "out2";
    }
}

 

(3) 인터페이스 구현체에서 페이지 3개씩 가져와서 DB저장소로 이동

@Override
public Page<InterInterface> allout21(int page) {
    return interRepository.allout22(PageRequest.of(page,3,Sort.Direction.ASC,"name"));
}

 

 

(4) DB저장소에서 가져올 데이터 쿼리문 작성하기

(엔터티에서 직접 데이터를 가져오는 것이 아니기 때문에 DB에 쿼리문을 따로 작성하여 Oracle 테이블에서 가져오는 것)

@Query(value =  "select  name, tel,jumin,address, " +
        "TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY'))-TO_NUMBER( " +
        "CASE WHEN SUBSTR(jumin,8,1) IN('1','2') THEN '19' " +
        "WHEN SUBSTR(jumin,8,1) IN('3','4') THEN '20' " +
        "END || substr(jumin,1,2))+1 as age, " +
        "case when SUBSTR(jumin,8,1) in ('1','3') then '남자' " +
        "when SUBSTR(jumin,8,1) in ('2','4') then '여자' " +
        "end as sb " +
        "from inter0525 ", nativeQuery = true)

Page<InterInterface> allout22(Pageable pageable);​

 

 

(5) out.template에서 아래 페이징 처리 코딩 넣고 @{/해당템플릿이름} 타임리프 형식으로 이름 수정하기

<!-- 페이징 처리 -->
<!--3.1 버젼-->
<div class="pagination">
    <ul>
        <li th:each="page, stat : ${#numbers.sequence(0, totalPage - 1)}">

          <span th:if="${nowpage == stat.index + 1}" >
            <a th:href="@{/memberOut2(page=${stat.index})}"
               th:text="${stat.index + 1}" style="color:red" ></a>
          </span>
            
          <span th:if="${nowpage != stat.index + 1}">
            <a th:href="@{/memberOut2(page=${stat.index})}"
               th:text="${stat.index + 1}"></a>
          </span>

        </li>
    </ul>
</div>

 

끝.