Person CRUD 만들기

yuns·2022년 10월 1일
0

Spring

목록 보기
2/13
post-thumbnail
  1. 패키지와 .java파일 준비

Person

  1. Person에 가서 ID와 각 변수에 @Column 표시하기
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Column(nullable = false)

클래스 위에 annotation 붙이기

@Getter
@NoArgsConstructor
@Entity

PersonRequsetDto

  1. PersonRequestDto에 가서 클래스 위에 annotation 붙이기
@NoArgsConstructor
@Getter

클래스 안에 person의 변수들 만들기

package com.people.week02People.domain;


import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.Column;


@NoArgsConstructor
@Getter
public class PersonRequestDto {
    private String name;

    private int age;

    private String address;

}
  1. 다시 Person으로 가서, 생성자와 update메소드(dto이용 만들기
package com.people.week02People.domain;

import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Getter
@NoArgsConstructor
@Entity
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private int age;

    @Column(nullable = false)
    private String address;

    public Person(PersonRequestDto requestDto) {
        this.name = requestDto.getName();
        this.age = requestDto.getAge();
        this.address = requestDto.getAddress();
    }

    public void update(PersonRequestDto requestDto) {
        this.name = requestDto.getName();
        this.age = requestDto.getAge();
        this.address = requestDto.getAddress();
    }
}

Dto에서 getter로 값을 가져와서 다시 각 변수에 할당하는것.

PersonRepository

  1. PersonRepository로 가서, class를 interface 키워드로 바꾸고, extends JpaRepository<Person, Long> 붙이기
package com.people.week02People.domain;

import org.springframework.data.jpa.repository.JpaRepository;

public interface PersonRepository extends JpaRepository<Person, Long> {
}

Repository는 API구현체를 가져다 쓸것이기 때문에 interface로 만들어준 뒤, JpaRepository에는 Person과 id의 자료형인 Long을 넣어주면 JapRepository의 구현된 기능들을 사용할 수 있다.

PersonService

  1. PersonService로 가서, 클래스 위에 annotation붙여주기
package com.people.week02People.service;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

// annotation
@RequiredArgsConstructor
@Service
public class PersonService {
}

클래스 안에 PersonRepository 만들고, update 메소드 추가

package com.people.week02People.service;

import com.people.week02People.domain.Person;
import com.people.week02People.domain.PersonRepository;
import com.people.week02People.domain.PersonRequestDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;

// annotation
@RequiredArgsConstructor
@Service
public class PersonService {
    private final PersonRepository personRepository;

    @Transactional
    public Long update(Long id, PersonRequestDto requestDto) {
        Person person1 = personRepository.findById(id).orElseThrow(
                () -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
        );
        person1.update(requestDto);
        return person1.getId();
    }
}

update는 id로 유일한 데이터 하나를 가져와서 DTO의 데이터를 실어다가 db에 가져다주는것이다.
그래서 파라미터가 id와 dto 두가지가 필요하다.

PersonController

  1. PersonController로 가서. annotation 붙이기

@RequiredArgsConstructor
@RestController

클래스 안에 PersonRepository와 PersonService, 각 기능 붙이기

package com.people.week02People.controller;

import com.people.week02People.domain.Person;
import com.people.week02People.domain.PersonRepository;
import com.people.week02People.domain.PersonRequestDto;
import com.people.week02People.service.PersonService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RequiredArgsConstructor
@RestController
public class PersonController {
    private final PersonRepository personRepository;
    private final PersonService personService;

    @GetMapping("/api/persons")
    public List<Person> getPersons() {
        return personRepository.findAll();
    }

    @PostMapping("/api/persons")
    public Person createPerson(@RequestBody PersonRequestDto requestDto) {
        Person person = new Person(requestDto);
        return personRepository.save(person);
    }

    @PutMapping("/api/persons/{id}")
    public Long updatePerson(@PathVariable Long id, @RequestBody PersonRequestDto requestDto) {
        return personService.update(id,requestDto);
    }

    @DeleteMapping("/api/persons/{id}")
    public Long deletePerson(@PathVariable Long id) {
        personRepository.deleteById(id);
        return id;
    }
}

@GetMapping 이란 뒤의 /api/persons라는 주소로 GET방식으로 호출했을 때 특정 작업을 수행해주라는 명령이다. 모든 것을 가져오기 위해서는 List에 담아줘야한다

0개의 댓글