들어가기 전에
5주 차에는 기본 JPA 설정을 했습니다. 아래 사이트에서 설정 방법 및 DB 설치를 확인할 수 있습니다.
https://jih3508.168
(JSCODE – Spring Boot 소개) 5주차
데이터베이스 인터뷰 자주 묻는 질문 데이터베이스의 속성에 대해 설명해주세요. 실시간으로 접근성을 생성, 수정 및 삭제하여 현재 데이터를 유지합니다. 사용자 동시 공유
jih3508.tistory.com
(예시) 상품 등록, API 요청
이번에는 제품 데이터로 JPA를 수행하는 방법을 보여 드리겠습니다.
제품.자바
제품 테이블과 연결할 개체를 만듭니다.
import lombok.Data;
import lombok.ToString;
import javax.persistence.*;
@Table(name = "product", schema = "test")
@Entity
@Data
@ToString
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@Column
private Long price;
public Product() {
}
}
ProductRepository.java
Spring JPA 데이터를 사용하기 위해 JPA 리포지토리를 생성합니다.
import com.example.test.storage.model.entity.Product;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
}
ProductController.java
import com.example.test.storage.model.entity.Product;
import com.example.test.storage.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/api/product")
public class ProductController {
@Autowired
ProductService productService;
@GetMapping("")
public List<Product> findAll(){
return productService.findAll();
}
@PostMapping("")
public String saveProduct(Product product){
productService.save(product);
return product.toString() + "\n저장하였습니다";
}
}
ProductService.java
Spring JPA Data는 기본적으로 findAll을 제공합니다.
import com.example.test.storage.model.entity.Product;
import com.example.test.storage.repository.ProductRepository;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ProductService {
private final ProductRepository productRepository;
public ProductService(ProductRepository productRepository) {
this.productRepository = productRepository;
}
public List<Product> findAll(){
return productRepository.findAll();
}
public void save(Product product){
productRepository.save(product);
}
}
결과
등록

전체 검색

상품상세검색 구현
ProductRepository.java
findAllById를 사용하면 Id가 자동으로 검색됩니다.
import com.example.test.storage.model.entity.Product;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
Product findAllById(Long id);
}
ProductService.java
반환 시 선택적 유형으로 반환됩니다.
public Product findById(Long id){
return productRepository.findById(id)
.map(product -> product)
.orElseGet(() -> null);
}
ProductController.java
제품이 있을 때와 없을 때를 구분합니다.
@GetMapping("{id}")
public Object findById(@PathVariable(value = "id") Long id) throws Exception {
Product product = productService.findById(id);
if(product == null){
return "조회할 데이터 없습니다.";
}
return product;
}