스프링 부트로 홈페이지 맨 아래 페이지 나타내기
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>
끝.
'AI딥러닝 > SporingBoot' 카테고리의 다른 글
| Query과 Interface를 이용하여 두 개 이상의 테이블 조인하기 (0) | 2026.01.12 |
|---|---|
| SpringBoot Thymleaf Oracle' Image CRUD+S 처리하는 법 (0) | 2026.01.10 |
| Springboot : Thymeleaf 레이아웃 코딩 시 발생할 수 있는 오류 (0) | 2026.01.09 |
| Spring Boot, 초보개발자 API 정복하기! (0) | 2026.01.09 |
| Spring Security를 활용한 로그인 및 로그아웃 구현 (0) | 2026.01.06 |