<dependency> JPA프레임워크& Pageable

<dependency>

	<!-- pageable -->
 	<dependency>
		<groupId>org.springframework.data</groupId>
		<artifactId>spring-data-commons</artifactId>
		<version>2.2.9.RELEASE</version>
	</dependency> 
	
	<!--JPA library -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-rest</artifactId>
	</dependency>

@Controller

package com.example.demo.cont;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.jpa.UserRepository;

@Controller
@RequestMapping("/user")
public class UserController 
{
   @Autowired
   UserRepository rep; //mapper
   
   @GetMapping("")
   public String index() {
      return "Spring boot MyBatis Test";
   }
   
   @GetMapping("/rep")
   public String jpaTest(@PageableDefault(page=0, size=2) Pageable pageable, Model model) 
   {
      Page<User> pageInfo = rep.findAll(pageable);
      if(pageInfo.getNumber()-5 <1) {
         model.addAttribute("start", 1);
      }else {
         model.addAttribute("start", pageInfo.getNumber()-5);
      }
      
      if(pageInfo.getTotalPages()< pageInfo.getNumber()+5) {
         model.addAttribute("end", pageInfo.getTotalPages());
      }else {
         model.addAttribute("end", pageInfo.getNumber()+5);
      }
      model.addAttribute("page", pageInfo);
      return "jpa_paging";
   }
}

@Entity //(VO)

@Entity(name="user")
@Table(name="user") 
public class User
{
   @Id
   private String uid;
   private String pwd;

Repository 인터페이스 선언<Entity, PK자료형> //(mapper)

@Repository
public interface UserRepository extends JpaRepository<User, String> 
{
    Page<User> findAllByUid(String uid, Pageable pageable);
    Page<User> findAll(Pageable pageable);
    Page<User> findAllByPwd(String pwd, Pageable pageable);
}

VEIW

<%@ page 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>JPA Pagination Examples</title>
</head>
<body>
<h3>Spring boot에서 JPA, Pageable을 이용한 페이지 나누기 예</h3>
<c:forEach var="user" items="${page.content}">
   <div>${user.uid} ${user.phone} ${user.email} </div>
</c:forEach>
<hr>
<c:forEach var="i" begin="${start}" end="${end}">
   <a href="/user/rep?page=${i-1}&size=2">${i}</a>
</c:forEach>
</body>
</html>

EL을 통해 사용 가능한 Page 속성들
last, first, totalElements, totalPages, size,
number, sort, numberOfElements, empty

 

JPA docs

https://docs.spring.io/spring-data/data-jpa/docs/1.4.x/reference/htmlsingle/

 

Spring Data JPA - Reference Documentation

MonetaryAmount amount = new MonetaryAmount(200.0, Currencies.DOLLAR); List customers = customerRepository.findAll( where(isLongTermCustomer()).or(hasSalesOfMoreThan(amount))); As you can see, Specifications offers some glue-code methods to chain and combin

docs.spring.io

 

Comment