Java&Spring/Spring

Spring data-JPA,data-Rest (feat.프로젝트 구조)

sung.hyun.1204 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

class 최상단에는 @RequestMapping("/api") 가 있다.

 

 

이상없다 굿!

 

 

쉬어 가는 코너

 

-       폴더는 도메인 별로 나누는게 이상적인것 같다.

 

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 한다.

Application 의 Service 가 없어 진다.

 

잘나온다

 

아마,,, 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 도 설정이 가능하며

쿼리에 워하는 방식으로 정렬도 가능하다.