Spring
[SpringBoot] JPA 사용해서 페이지네이션 구현해보기
송 이
2024. 6. 4. 15:27
- Memo 엔티티 클래스 생성
@Entity //JPA로 관리되는 객체라는 표시이다.
@Table(name = "tbl_memo")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Memo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long mno;
@Column(length = 200, nullable=false)
private String memoText;
public Memo(String memoText) {
this.memoText = memoText;
}
}
@Id : 기본키 설정
@GeneratedValue(strategy = GenerationType.IDENTITY) : 자동 숫자 증가
@Column(length = 200, nullable=false) : 컬럼 생성, 제약조건 추가
- 레포지토리 인터페이스 생성
public interface MemoRepository extends JpaRepository<Memo, Long>{
//save(엔티티), findById(아이디), deleteById(아이디),findAll(),count()
List<Memo> findByMnoBetweenOrderByMnoDesc(Long from, Long to);
}
- 컨트롤러 생성 => 페이지네이션 구현 기능
@Controller
public class MyController {
@Autowired
MemoRepository memoRepository;
@RequestMapping("/list")
public String list(@RequestParam("pageNum")Long pageNum, Model model) {
//전체 게시글 수
int totalCnt = (int)memoRepository.count();
//페이지 당 게시글 수 : 10개
int pagePerboard=10;
//페이지 블록에 보여질 페이지 번호 수 : 5개
int pageCount = 5;
//페이지 블록 시작 페이지 번호
int start = (int)Math.floor((pageNum-1)/pageCount)*pageCount+1;
//페이지 블록 끝 페이지 번호(시작번호 + 5)
int end = start + (pageCount-1);
//실제 페이지 블록 끝번호
int realEnd = (totalCnt/10)+1;
System.out.println("pageNum : "+ pageNum);
model.addAttribute("pageNum",pageNum);
model.addAttribute("list",memoRepository.findByMnoBetweenOrderByMnoDesc((pageNum*10)-9,pageNum*10));
model.addAttribute("totalCnt",totalCnt);
model.addAttribute("start",start);
model.addAttribute("end",end);
model.addAttribute("realEnd",realEnd);
return "list";
}
}
- View 생성
<%@ 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>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div>
<c:if test="${start ne 1 }">
<span><a href="list?pageNum=${start-5 }">[이전]</a></span>
</c:if>
<c:forEach var="i" begin="${start }" end="${(end<realEnd)?end:realEnd }">
<a href="list?pageNum=${i }">${i }</a>
</c:forEach>
<c:if test="${end<realEnd }">
<span><a href="list?pageNum=${end+1 }">[다음]</a></span>
</c:if>
<div>start : ${start }</div>
<div>end : ${end }</div>
<div>realEnd : ${realEnd }</div>
</div>
</body>
</html>