@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false)
클래스 위에 annotation 붙이기
@Getter
@NoArgsConstructor
@Entity
@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;
}
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로 값을 가져와서 다시 각 변수에 할당하는것.
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의 구현된 기능들을 사용할 수 있다.
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 두가지가 필요하다.
@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에 담아줘야한다