ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

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

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

    '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
Designed by Tistory.