Spring data-JPA,data-Rest (feat.프로젝트 구조)
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 도 설정이 가능하며
쿼리에 워하는 방식으로 정렬도 가능하다.