Development/Spring
Android, Spring Boot, Mysql 데이터 파이프 라인 구축 실습 (SpringBoot)-1 프로젝트 생성 및 클래스 작성
우봉수
2023. 6. 16. 22:32
1. 프로젝트 생성
2. 생성된 zip 파일 위치 설정 및 실행
로컬 디스크(c)로 이동 후 압축 해제
IntelliJ로 실행
3. controller, domain, repository로 분할 클래스,인터페이스 작성
MedicationsController.java
package _PF026.DrDrug.controller;
import _PF026.DrDrug.domain.Medications;
import _PF026.DrDrug.repository.MedicationsRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
@RestController
public class MedicationsController {
@Autowired
private MedicationsRepository repository;
@GetMapping("/medications")
public List<Medications> getAllMedications(){
return repository.findAll();
}
@GetMapping("/medications/{id}")
public Medications getMedicationsDetail(@PathVariable long id){
Optional<Medications> medications = repository.findById(id);
if(medications.isEmpty()){
throw new RuntimeException("Course not found with id "+id);
}
return medications.get();
}
@PostMapping("/medications")
public void createMedications(@RequestBody Medications medications){
repository.save(medications);
}
// 객체가 존재하면 업데이트 없다면 삽입
@PutMapping("/medications")
public void updateMedications(@RequestBody Medications medications){
repository.save(medications);
}
// 객체가 존재하면 업데이트 없다면 삽입
@DeleteMapping("/medications/{id}")
public void deleteMedications(@PathVariable long id){
repository.deleteById(id);
}
}
Medications.java
package _PF026.DrDrug.domain;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import lombok.Getter;
import lombok.Setter;
@Entity
@Getter @Setter
public class Medications {
@Id @GeneratedValue
private Long id;
private String medicationId;
private String name;
}
MedicationsRepository.java
package _PF026.DrDrug.repository;
import _PF026.DrDrug.domain.Medications;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface MedicationsRepository extends JpaRepository<Medications,Long> {
}
<Repository>를 만들때는 EntityManager와 JpaRepository 두 가지 다른 방법이 존재하는데 여기서는 간단한 CRUD연산만 필요 하므로 JpaRepository를 사용하였다.
- EntityManager를 사용: EntityManager는 JPA의 핵심 컴포넌트로, 엔티티를 관리하며 데이터베이스와의 모든 상호작용을 처리합니다. EntityManager를 사용하면 직접적으로 데이터베이스 작업을 제어할 수 있습니다. 복잡하고 세밀한 작업이 필요한 상황에서는 EntityManager를 사용하는 것이 좋을 수 있습니다. 하지만 EntityManager를 사용하면 코드가 복잡해질 수 있고, JPA를 깊이 이해해야 할 수 있습니다.
- JpaRepository를 상속: JpaRepository를 상속받는 Repository를 사용하면 CRUD 연산을 매우 쉽게 처리할 수 있습니다. JpaRepository는 기본적인 CRUD 메서드를 제공하며, 이를 상속받는 클래스는 이 메서드를 직접 사용할 수 있습니다. 또한, 메서드 이름으로 쿼리를 생성하는 기능을 제공하여 데이터베이스 작업을 매우 쉽게 만들어줍니다. JpaRepository를 사용하면 보일러플레이트 코드를 크게 줄일 수 있지만, 복잡한 쿼리나 특정 데이터베이스 작업을 처리하기 어려울 수 있습니다.