Create = POST / body
: create๋ ์๋ฒ์ ์ ๋ณด๋ฅผ ์ฌ๋ ค๋ฌ๋ผ๋ ์์ฒญ, create๋ post๋ฅผ ํตํด ํด๋น URI๋ฅผ ์์ฒญํ๋ฉด ๋ฆฌ์์๋ฅผ ์์ฑํจ.
Read = GET / param
: read๋ ์๋ฒ์์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ค๋ ์์ฒญ. GET์ ํตํด ํด๋น ๋ฆฌ์์๋ฅผ ์กฐํํ ํด๋น ๋ํ๋จผํธ์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ด.
Update = PUT / body
: update๋ ์ ๋ณด๋ฅผ ๋ฐ๊พธ๋ ์์ฒญ.
Delete = DELETE / param
: delete๋ ์ ๋ณด๋ฅผ ์ง์ฐ๋ ์์ฒญ. DELETE๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ ์ ์์.
์ฐ๋ฆฌ ์คํฐ๋์์๋ JPA๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํด๋ณด๊ธฐ๋ก ํ์๋ค.
๋จผ์ Repository
์ ๋ํด ์ ๋ฆฌํ์๋ฉด
Repository์ ์ ํํ ์ฌ์ฉ์ DAO๋ฅผ ์ํด ์ฌ์ฉํ๋ ์ด๋
ธํ
์ด์
์ธ๋ฐ JpaRepository๋ JPA์ ๊ตฌํ์ฒด๋ผ๊ณ ํ ์ ์๋ค.์ฐ๋ฆฌ๊ฐ JPA์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋ฐ์ดํฐ์ ํจ์จ์ ์ธ ์ ์ฅ๊ณผ ์ฒ๋ฆฌ ๋ฐ ๊ฐ๊ณต์ด๋ผ๊ณ ์๊น ์ด์ผ๊ธฐ์ธ๋ฐ ๊ทธ๋ฐ ๋ฐ์ดํฐ์ ํจ์จ์ ์ธ ์ฒ๋ฆฌ๋ฅผ ์ํด์ Jpa๋ ๊ธฐ๋ณธ์ ์ธ CRUD๊ฐ ์ ์๋์ด ์๋ JpaRepository๋ฅผ ๊ตฌํํ์๊ณ ์ฌ์ฉ์๋ค์ ๊ทธ ๊ตฌํ์ฒด๋ฅผ ์์ํ์ฌ ์ฌ์ฉํ๋ค.
HealthRepository.java
package com.example.demo.repository;
import com.example.demo.domain.HealthInfo;
import org.springframework.data.jpa.repository.EntityGraph;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.awt.print.Pageable;
import java.util.List;
public interface HealthRepository extends JpaRepository<HealthInfo,Long> {
}
๊ฐ ๊ธฐ๋ฅ๋ค์ ์ธํฐํ์ด์ค๋ก ์ ์ํ๊ณ
HealthService.java
import com.example.demo.data.request.HealthRequestDTO;
import com.example.demo.data.response.HealthResponseDTO;
public interface HealthService {
public HealthResponseDTO read(Long id);
public boolean saveHealth(HealthRequestDTO healthRequestDTO);
public boolean updateHealth(HealthRequestDTO healthRequestDTO);
public boolean deleteHealth(Long id);
}
๋ฉ์๋ ๋ช ์์ ์ ์ ์๋ค์ํผ read, save, update, delete๋ฅผ ์ ์ํ์๋ค.
๊ทธ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ฅผ ๋ฐ๋ก ๋ง๋ค์๋ค.
HealthServiceImpl.java
package com.example.demo.service.impl;
import com.example.demo.data.request.HealthRequestDTO;
import com.example.demo.data.response.HealthResponseDTO;
import com.example.demo.data.response.ReviewResponseDTO;
import com.example.demo.domain.HealthInfo;
import com.example.demo.domain.Review;
import com.example.demo.repository.BoardRepository;
import com.example.demo.repository.HealthRepository;
import com.example.demo.repository.ReviewRepository;
import com.example.demo.service.HealthService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
@Slf4j
public class HealthServiceImpl implements HealthService {
private final HealthRepository healthRepository;
private final ReviewRepository reviewRepository;
@Override
public HealthResponseDTO read(Long id){
HealthInfo healthInfo = healthRepository.findById(id)
.orElseThrow(RuntimeException::new);
HealthResponseDTO a= HealthResponseDTO.builder()
.id(healthInfo.getId())
.brand_name(healthInfo.getBrand_name())
.category(healthInfo.getCategory())
.land_number(healthInfo.getLand_number())
.road_number(healthInfo.getRoad_number())
.build();
return a;
}
@Override
public boolean saveHealth(HealthRequestDTO healthRequestDTO){
healthRepository.save(healthRequestDTO.toEntity(healthRequestDTO));
return false;
}
public boolean updateHealth(HealthRequestDTO healthRequestDTO){
HealthInfo healthInfo = healthRepository.findById(healthRequestDTO.getId()).orElseThrow(RuntimeException::new);
healthInfo.modifyHealthinfo(healthRequestDTO.getBrand_name()
,healthRequestDTO.getLand_number()
,healthRequestDTO.getRoad_number()
,healthRequestDTO.getCategory());
try{
healthRepository.save(healthInfo);
}catch (Exception e){
return false;
}
return true;
};
public boolean deleteHealth(Long id){
healthRepository.deleteById(id);
return true;
};
}
MainController.java
@GetMapping("/read")
public ResponseEntity<HealthResponseDTO> getRead(@RequestParam Long id){
return ResponseEntity.ok(healthService.read(id));
}
User๊ฐ GET๋ฐฉ์์ผ๋ก "localhost:8080/read?id=1"๋ฅผ ์์ฒญํ๋ฉด id๊ฐ์ ๊ฐ์ง๊ณ healthService์ ์๋ read๋ฅผ ์คํํ๋ค.
HealthServiceImpl.java
@Override
public HealthResponseDTO read(Long id){
HealthInfo healthInfo = healthRepository.findById(id)
.orElseThrow(RuntimeException::new);
return HealthResponseDTO.builder()
.id(healthInfo.getId())
.brand_name(healthInfo.getBrand_name())
.category(healthInfo.getCategory())
.land_number(healthInfo.getLand_number())
.road_number(healthInfo.getRoad_number())
.build();
}
healthInfo ๊ฐ์ฒด์ Controller์์ ๋งค๊ฐ๋ณ์๋ก ๋ค์ด์จ id๊ฐ์ ๊ฐ์ง๊ณ Repository์์ ํด๋น id๊ฐ์ ๊ฐ์ง ์ ๋ณด๋ฅผ DB์์ ์ฐพ์ ๋์ ํ๋ค.
healthInfo์ ์๋ ์ ๋ณด๋ค์ getter๋ก ๊ฐ์ ธ์ HealthResponseDTO๊ฐ์ฒด๋ฅผ builderํจํด์ผ๋ก ์์ฑํด ๋ฆฌํดํ๋ค.
MainController.java
return ResponseEntity.ok(healthService.read(id));
Service์์ ๋ฆฌํดํ ๊ฐ(์๋ต ์ ๋ณด)์ ๊ฐ์ง๊ณ ResponseEntity์ ok๋ฉ์๋๋ฅผ ์คํํ๋ค.
ResponseEntity๋
ResponseEntity๋, httpentity๋ฅผ ์์๋ฐ๋, ๊ฒฐ๊ณผ ๋ฐ์ดํฐ์ HTTP ์ํ ์ฝ๋๋ฅผ ์ง์ ์ ์ดํ ์ ์๋ ํด๋์ค์ด๋ค.
ResponseEntity์๋ ์ฌ์ฉ์์ HttpRequest์ ๋ํ ์๋ต ๋ฐ์ดํฐ๊ฐ ํฌํจ๋๋ค.
MainController.java
@PostMapping("/save")
public ResponseEntity<Boolean> postSave(@RequestBody HealthRequestDTO healthRequestDTO){
try{
healthService.saveHealth(healthRequestDTO);
}catch (Exception e){
return ResponseEntity.ok(false);
}
return ResponseEntity.ok(true);
}
์ ์ฅ์ post๋ฐฉ์์ผ๋ก ์คํํ๋ค.
์ค๋ฅ๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ healthService.saveHealth(healthRequestDTO);
์ฝ๋๋ฅผ try
๋ฌธ์ผ๋ก ๊ฐ์๊ณ , ์ค๋ฅ๊ฐ ๋๋ค๋ฉด false๋ฅผ ๋ฐํํ๋ค.
saveHealth์ ๋งค๊ฐ๋ณ์๋ healthRequestDTO(์์ฒญ๋ฐ์ดํฐ)๋ค.
HealthServiceImpl.java
@Override
public boolean saveHealth(HealthRequestDTO healthRequestDTO){
healthRepository.save(healthRequestDTO.toEntity(healthRequestDTO));
return false;
}
saveHealth์ ๋ฉ์๋ ๋ด์ฉ์ด๋ค. healthRequestDTOํด๋์ค์ toEntity๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋กController์์ ์จ ์์ฒญ๋ฐ์ดํฐ(healthRequestDTO)๋ฅผ ๋ณด๋ธ๋ค.
HealthRequestDTO.java
public static HealthInfo toEntity(HealthRequestDTO dto){
return HealthInfo.builder()
.id(dto.getId())
.brand_name(dto.getBrand_name())
.category(dto.getCategory())
.land_number(dto.getLand_number())
.road_number(dto.getRoad_number())
.reviews(dto.getReview().getHealthInfo().getReviews())
.build();
}
toEntity๋ฉ์๋๋ dto์ ๊ฐ์ Entity๊ฐ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ์ญํ ์ ํ๋ค.
์ฌ๊ธฐ์ toEntity์ ๋ํ ๋ณด๋ค ์์ธํ ํฌ์คํ
์ด ์๋ค.(๋๋ ์ด๊ฑฐ ๋ณด๊ณ ์ดํดํจ)
์๋ฌดํผ ๊ทธ ์์ฒญ ๋ฐ์ดํฐ๋ก helathinfo์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ค, ๊ทธ ๋ด์ฉ์ repository์ save๋ก ์ ์ฅํ๋ค.
MainController.java
@PutMapping("/update")
public ResponseEntity<Boolean> updateSave(@RequestBody HealthRequestDTO healthRequestDTO){
try{
healthService.updateHealth(healthRequestDTO);
}catch (Exception e){
return ResponseEntity.ok(false);
}
return ResponseEntity.ok(true);
}
update๋ save์ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค. save์ ๊ฐ์ฅ ํฐ ๋ค๋ฅธ ์ ์ put๋ฐฉ์์ด๋ผ๋ ๊ฒ์ด๋ค.
HealthServiceImpl.java
public boolean updateHealth(HealthRequestDTO healthRequestDTO){
HealthInfo healthInfo = healthRepository.findById(healthRequestDTO.getId()).orElseThrow(RuntimeException::new);
healthInfo.modifyHealthinfo(healthRequestDTO.getBrand_name()
,healthRequestDTO.getLand_number()
,healthRequestDTO.getRoad_number()
,healthRequestDTO.getCategory());
try{
healthRepository.save(healthInfo);
}catch (Exception e){
return false;
}
return true;
};
์ ์ฅ์ ๊ทธ๋ฅ ํ๋ฉด ๋์ง๋ง update๋ ๊ธฐ์กด์ ๋ฐ์ดํฐ๋ฅผ ์์ ํด์ผํ๊ธฐ๋๋ฌธ์ id๋ก ๋จผ์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ค.
HealthInfo.java
public void modifyHealthinfo(String brand_name,String land_number,String road_number, String category){
this.brand_name=brand_name;
this.land_number=land_number;
this.road_number=road_number;
this.category=category;
}
๊ทธ ํ ๋ฏธ๋ฆฌ ์ ์ํ ๋ฉ์๋๋ก ์์ฒญ๋ฐ์ดํฐ๋ฅผ ๋ค์ setํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค. ๊ทธ๋ผ ์์ ๋ ใ
ใ
์ฌ๋ด์ผ๋ก ํ์๋ผ๋ฆฌ ์ญํ ์ ๋ฐ๋ก ๋งก์์ ๊ตฌํํ๋๋ฐ ๋ด๊ฐ update๋ฅผ ๋งก์์๋ค..
๊ทผ๋ฐ ์ง์ง ๋ญ๊ฐ ๋ญ์ง ํ๋๋ ๋ชจ๋ฅด๊ฒ ์ด์ ๊ฒฐ๊ตญ ํ์ฅ๋์ด ๊ตฌํํด์ฃผ์ฌ ^^..
์ค๋ช
๋ค์๋๋ ์ดํด๊ฐ๋๋ฐ ๋ง์ ๋ด๊ฐ ํ๋ ค๋ฉด ๋ชจ๋ฅด๊ฒ ๋๊ฑฐ,,, ๋๋ง๊ทธ๋ฐ๊ฐ์์ค,..?
MainController.java
@DeleteMapping("/delete")
public ResponseEntity<Boolean> getDelete(@RequestParam Long id){
return ResponseEntity.ok(healthService.deleteHealth(id));
}
delete๋ ์กฐํ์ ๋ง์ฐฌ๊ฐ์ง๋ก id๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๋๋ค.
๋ฐ์ id๋ก healthService.deleteHealth๋ฅผ ์คํํ๋ค.
HealthServiceImpl.java
public boolean deleteHealth(Long id){
healthRepository.deleteById(id);
return true;
};
delete๋ ์ ์ผ ๊ฐ๋จํ๋ค ์ฐํํ
id๋ก repository์ deleteById๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ง์์ค๋ค
์ด๋ ๊ฒ ๋ฌด์์ CRUD๊ฒ์ํ ๋ง๋ค๊ธฐ๊ฐ ๋์ด๋ฌ๋ค. !! ์ด์ ์ง์ง๋ก ์ ๋๋ก๋ ๊ตฌํ์ด ๋๋์ง ๋ณด์๊ตฌ์์ค ๐คญ
ํ๋ก์ ํธ์ ์ฐ๊ฒฐ๋์ด์๋ ํ
์ด๋ธ์ ์ํฌ๋ฒค์น๋ฅผ ํตํด ๋จผ์ ์กฐํํด๋ณด์๋ค.
ui๋ฅผ ๋ฐ๋ก ๋ง๋ค์ง ์์ ๋ชจ๋ ์คํ์ Swagger๋ก ๋์ ํ์๋ค ๐ฅณ
DB์ ์ฐ๊ฒฐ๋ ์๋ฃ๊ฐ ์ ์์ ์ผ๋ก ์กฐํ๋๊ฒ์ ๋ณผ ์ ์๋ค :) ์ฐํํ
Swagger๋ก ํด๋น๋ฐ์ดํฐ๋ค์ ์ ์ฅํ์๋ค. id๊ฐ์ ์๋์ผ๋ก ๋ฃ์ด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ง์ ํ์ง ์์๊ณ ,
์ด๋ฆ์ ์ฐํํ ์นดํ
๊ณ ๋ฆฌ๋ ํฌ์ค์ฅ landnumber๋ ์์ธ์ ์ด์ฉ๊ณ road_number๋ ์ ์ฉ๊ณ
๋ก ์ ์ฅํ๋ค.
์ํฌ๋ฒค์น์์ ํ์ธํด๋ณด๋ ์ ์์ ์ผ๋ก ๊ฐ์ด ๋ค์ด๊ฐ๊ฒ์ ๋ณผ ์ ์๋ค !
๋ฐฉ๊ธ ์ ์ฅํ id 93๋ฒ ๋ฐ์ดํฐ๋ฅผ ์ด๋ฆ ์์ ํ๊ฒ ์ด๋๋ค.. ์นดํ
๊ณ ๋ฆฌ๋ ํฌ์ค์ฅใ
ใ
land_number๋ ๊ฒฝ๊ธฐ๋, road_number๋ ์ด์ฉ๊ตฌ
๋ก ์์ ํ์๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์ํฌ๋ฒค์น์์ ํ์ธํด๋ณด๋ ์ ์์ ์ผ๋ก ์ ์์ ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค !! ๊บ์
์๊น ์ ์ฅํ๊ณ ์์ ํ๋ 93๋ฒ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ค.
์ํฌ๋ฒค์น์์ ํ์ธํด๋ณด๋ฉด? ์์ฃผ ์ ์ง์์ง๊ฒ์ ๋ณผ ์ ์๋ค!!!
์ฌ์ค ์ฒ์์๋ ํธ๊ธฐ๋กญ๊ฒ ์์ํ๋ค๊ฐ ์์ฒญ๋๊ฒ ๋ง๋งํ๋ ์ฒซ ์คํ๋ง๋ถํธ ํ๋ก์ ํธ์๋ค.
์ฌ์ค ์ ๊ธฐ๋ฅ์ค์ ๋ด๊ฐ ์ ๋๋ก ๊ตฌํํด๋ณธ ๊ฒ์ ์์ง๋ง ์ด ํ๋ก์ ํธ๋ฅผ ํตํด Entity, Service, DTO, Reposity๋ฑ ์ฌ๋ฌ๊ฐ์ง ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ๊ณต๋ถํ ์ ์์๊ณ , ์ ๋ ์ดํด ์๊ฐ๊ฒ ๊ฐ๋ ์ฝ๋๋ค๋ ์ ์ ๋์ ๋ค์ด์ค๋ ์ค์ด๋ค. ๋ฐฑ๋ฌธ์ด ๋ถ์ฌ์ผ๊ฒฌ์ด๋ผ๊ณ ๊ฐ์๋ง ๋ฃ๋ ๊ฒ๋ณด๋ค ์ง์ ์ด๋ ๊ฒ ๋ถ๋ชํ๋ณด๋๊ฒ ํจ์ฌ ๋์์ด ๋๋ค๊ณ ๋๋๋ค :) !!
์ค๋์ ํ์์ ๋ค๋์ง ๋ฑ 1๋ฌ์ด ๋๋๋ ์ด๋ค ์๊ฐ ์ ๋ง์ ๋ง ์ฐธ ๋น ๋ฅด๋ค
๋์ค์ ๋ค๋์๋ดค์๋ ์๊ฐ ์๊น๊ฒ์จ์ ํํํ์ง ์์ผ๋ ค๋ฉด ์ด์ฌํ ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ญ๋๋ค์ ๐คง
๋ค์ ํฌ์คํ ์ ๋๊ธ CRUD๊ฐ ๋์ง์์๊น ์ถ๋ค :) !