728x90
반응형
Date: 2021년 12월 7일
Status: Completed
Task: Develop
주의
- Entitiy 정의는 본 주제에서 벗어나므로 다루지 않을 것
Test
- DB: MySQL Employees
Layer
- Controller
- End Point
- Service
- Repository에 의존
- Repository
- JpaRepository에 의존
- Entity
- employees DB와 연결된 테이블의 Entity
- Controller
Package
import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable;
- 삽질하다가 다른 패키지의 Pageable을 사용했다
- 헷갈리지 말고 위의 Pageable 객체를 사용하도록 하자
Controller 계층
컨트롤러 계층에서는 다음과 같이 Service에 DI를 걸어주자
EmployeesService employeesService; public EmployeesController(EmployeesService employeesService) { this.employeesService = employeesService; }
- 위와 같이 DI를 걸어주는 이유는
@Autowire
를 이용한 DI는 순환참조 문제를 야기시킬 수 있기 때문
- 위와 같이 DI를 걸어주는 이유는
Method를 다음과 같이 구성하자
@GetMapping("/employees") public Page<EmployeesEntity> selectEmployees(final Pageable pageable) { return employeesService.FindEmployeesByPageRequest(pageable); }
- 페이지네이션 처리를 위해 리턴 타입을 Page 객체로 만들어주자
- 실제로 페이지네이션을 처리하기 위해서는 Service 계층에 페이지네이션 처리를 위임하자
- Request 파라미터로 pageable 인수를 넘겨 Request 시 파라미터로 페이지에 옵션을 걸 수 있도록 해주자
Service 계층
Service 계층 DI
@Service public class EmployeesService { EmployeesRepository employeesRepository; public EmployeesService(EmployeesRepository employeesRepository) { this.employeesRepository = employeesRepository; } }
- Service 계층은 Controller와 Repostiory를 이어주는 역할이므로 Repsitory에 대한 의존성을 주입
Service 계층에서 페이징 처리하기
public Page<EmployeesEntity> FindEmployeesByPageRequest(Pageable pageable) { return employeesRepository.findAll(pageable); }
- FindEmployeesByPageRequest를 요청한 Controller에게 JpaRepository의 구현체인 Repository에게 findAll(Pageable pageable) 을 요청하여 결과값을 리턴
Repository 계층
JpaRepository 상속
@Repository public interface EmployeesRepository extends JpaRepository<EmployeesEntity, Integer> { }
- Repository 계층은 JpaRepository 를 상속받아놓기
SQL Logging
아무런 옵션없이 End Point에 기본 요청할 떄
Hibernate: select employeese0_.emp_no as emp_no1_0_, employeese0_.birth_date as birth_da2_0_, employeese0_.first_name as first_na3_0_, employeese0_.gender as gender4_0_, employeese0_.hire_date as hire_dat5_0_, employeese0_.last_name as last_nam6_0_ from employees employeese0_ limit ? Hibernate: select count(employeese0_.emp_no) as col_0_0_ from employees employeese0_
페이지네이션 정보를 요청할 떄
GET "/employees?page=1&size=5", parameters={masked} Hibernate: select employeese0_.emp_no as emp_no1_0_, employeese0_.birth_date as birth_da2_0_, employeese0_.first_name as first_na3_0_, employeese0_.gender as gender4_0_, employeese0_.hire_date as hire_dat5_0_, employeese0_.last_name as last_nam6_0_ from employees employeese0_ limit ?, ? Hibernate: select count(employeese0_.emp_no) as col_0_0_ from employees employeese0_
728x90
반응형
'Frame Work > Spring Boot' 카테고리의 다른 글
[Study] Interceptor와 Servletfilter (0) | 2021.12.08 |
---|---|
[JWT] SpringBoot에서 JWT 발급과 검증처리 (0) | 2021.12.08 |
[Spring Boot] Getter, Setter (0) | 2021.06.20 |
[Spring Boot] 시작하기 (0) | 2021.06.20 |