[Spring] 3) BOOKORDER_Back(1)

진주·2022년 3월 23일
0

Spring

목록 보기
28/29

MySQL에 더미 데이터 집어넣기

INSERT INTO BOOK(name, description, author, price) VALUES ("자바의 정석", "자바를 제대로 알고싶다면 꼭 구매하세요", "김자바", 15);

INSERT INTO BOOK(name, description, author, price) VALUES ("도라에몽", "도라에몽은 대체 무슨 생각을 하면서 살까?", "박도라에몽", 20);

INSERT INTO BOOK(name, description, author, price) VALUES ("귀멸의 칼날", "진정한 덕후들만 본다는 귀멸의 칼날..", "귀칼", 12);

INSERT INTO BOOK(name, description, author, price) VALUES ("짱구는 못말려", "짱구는 뭐하고 놀까", "흰둥이", 17);

[결과]

혹시 모르니까 commit; 까지 해주기


BookService.java

service - 파일명: BookService.java ,BookServiceImpl.java 생성

BookService.java의 class를 interface로 변경

Interface이므로 구현 class가 따로 있다 = BookServiceImpl.java


BookServiceImpl.java 코드

BookServiceImpl에 implements BookService를 추가한다.

초기 BookServiceImpl.java 상태

package dev.book.bookorder.service;

import java.util.List;
import java.util.stream.Collectors;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import dev.book.bookorder.model.dto.BookDTO;
import dev.book.bookorder.model.entity.Book;
import dev.book.bookorder.repository.BookRepository;

// @Service, @Autowired라는 Annotation을 반드시 정해줘야함 
@Service 
public class BookServiceImpl implements BookService {

  @Autowired  
  private BookRepository bookRepository;

  @Override
  public List<BookDTO> findAllBooks() {
    List<Book> list = bookRepository.findAll();

    List<BookDTO> result = list.stream().map(r -> new BookDTO(r)).collect(Collectors.toList());

    return result;
  }
}

위 코드를 복사 붙여넣기


BookRepository.java

repository - 파일 명 : BookRepository.java 생성,

BookRepository.java의 class를 interface로 변경하지만 구현 클래스를 직접 작성하지 않는다.

Repository는 내부적으로 SimpleJpaRepository를 사용한다.


BookController.java 수정

package dev.book.bookorder.controller;

import java.util.List;

import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import dev.book.bookorder.model.dto.BookDTO;
import dev.book.bookorder.service.BookService;


@CrossOrigin(origins="*")
@RestController // @Component와 동일, spring container에 bean으로 등록된다.
@RequestMapping("/api/v1/books") // localhost:8090/api/v1/books~
public class BookController {

  // BookService interface를 사용하기 위해 필드 선언
  private final BookService bookService;

  public BookController(BookService bookService){
    this.bookService = bookService;
  }

  @GetMapping()
  public List<BookDTO> findAllBooks(){
    return bookService.findAllBooks(); 
  }
}

😮 결과 확인 : BOOK_ORDER_APP

BACK 부분인 BOOKORDER에서 실행하는 것이 아니라,

FRONT인 BOOK_ORDER_APP에서 npm start를 통해 확인해야한다

빈 배열이 나오는 것 보니, back에서 제대로 데이터를 가져오지 못했다 ㅠㅠ


문제 해결 !!

서버를 실행하기 전에, application.properties에서
spring.jpa.hibernate.ddl-auto=createupdate로 변경해야 한다!!

create로 설정되어있으면,
BOOK TABLE에 있던 데이터가 DROP되고 다시 CREATE 되기 때문에 List가 빈 배열을 반환한 것 같다 🙄

왜 인지 모르겠지만 ㅎ MySQL에 넣은 데이터가 제대로 반영됐다!!

profile
진주의 코딩일기

0개의 댓글