-
Spring data-JPA,data-Rest (feat.프로젝트 구조)Java&Spring/Spring 2022. 10. 31. 14:18
2 가지를 볼거다,data-jpa ,data-rest
1. Spring Data JPA
Entity type 과 pk 값을 주면 자동으로 DAO 를 만들어주고
CRUD implementation 을 제공하는 기능을 한다 .
Repository 를 만든다.
package udemycode.dao; import org.springframework.data.jpa.repository.JpaRepository; import udemycode.domain.Employee; public interface EmployeeRepository extends JpaRepository<Employee,Integer> { }
끝이다.
Service 를 만든다.
package udemycode.service; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import udemycode.dao.EmployeeRepository; import udemycode.domain.Employee; import java.util.List; import java.util.Optional; @Service @RequiredArgsConstructor public class EmployeeServiceImpl implements EmployeeService{ private final EmployeeRepository employeeRepository; @Override public List<Employee> findAll() { return employeeRepository.findAll(); } // remove @transactional cause JPARepository provide it @Override public Employee findById(int theId) { // Optional for null check Optional<Employee> result = employeeRepository.findById(theId); Employee employee = null; if(result.isPresent()){ employee = result.get(); }else {throw new RuntimeException("Did not find employee id"+theId);} return employee; } @Override public void save(Employee theEmployee) { employeeRepository.save(theEmployee); } @Override public void deleteById(int theId) { employeeRepository.deleteById(theId); } }
말도 안되게 코드가 간결해진다. (자괴감이,,,)
확인을 위한 controller
쉬어 가는 코너
- 폴더는 도메인 별로 나누는게 이상적인것 같다.
ex) employee - api -> EmployeeController
-dao -> EmployeeRepository
-domain -> Employee,EmployeeStatusType,
-dto - (request,response,common)
-exception
-service (EmployeeService)
employer - api -> EmployerController
-dao -> EmployerRepository
-domain -> Employer,EmployerStatusType,
-dto - (request,response,common)
-exception
-service (EmployerService)
2. Spring Data REST
1. gradle 에 추가해준다.
implementation 'org.springframework.boot:spring-boot-starter-data-rest'
dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jdbc' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-data-rest'
2. 만들어둔 service 와 controller 전부 주석 처리한다.
끝.
아키텍처이다.
Service 단과 Controller 없이 Domain 과 Repository 만으로 api 가 json 을 response 한다.
아마,,, Spring-Data-Rest 까지는 사용을 안할듯 하다. 1인 개발자들은 편할듯,
추가로 basic path 는 application.yml 이나 properties 에서 설정 가능하다 .
수정 전 : http://localhost:8080/employees
application.yml 에 추가 : spring.data.rest.base-path=/root
spring: data: rest: base-path: /api/v1
수정 후 : http://localhost:8080/api/new/employees
추가로 yml 에 페이지네이션 page-size 도 설정이 가능하며
쿼리에 워하는 방식으로 정렬도 가능하다.
'Java&Spring > Spring' 카테고리의 다른 글
스프링부트 GCS 연동 part2 (0) 2023.01.26 스프링부트 GCS 연동 part1 (0) 2023.01.25 @Qualifier (0) 2022.10.31 Spring data Jpa camelCase 자동 underscore 방지 Mysql (0) 2022.09.19 Spring Test 기초[1] , assertall() (0) 2022.09.06