(JSCODE – Spring Boot 소개) 6주차

들어가기 전에

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;
}