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;
까지 해주기
service - 파일명: BookService.java
,BookServiceImpl.java
생성
BookService.java의 class를 interface로 변경
Interface
이므로 구현 class가 따로 있다 = 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;
}
}
위 코드를 복사 붙여넣기
repository - 파일 명 : BookRepository.java
생성,
BookRepository.java의 class를 interface로 변경하지만 구현 클래스를 직접 작성하지 않는다.
Repository는 내부적으로 SimpleJpaRepository를 사용한다.
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();
}
}
BACK 부분인 BOOKORDER
에서 실행하는 것이 아니라,
FRONT인 BOOK_ORDER_APP
에서 npm start
를 통해 확인해야한다
빈 배열이 나오는 것 보니, back에서 제대로 데이터를 가져오지 못했다 ㅠㅠ
서버를 실행하기 전에, application.properties에서
spring.jpa.hibernate.ddl-auto=create
를 update
로 변경해야 한다!!
create
로 설정되어있으면,
BOOK TABLE에 있던 데이터가 DROP되고 다시 CREATE 되기 때문에 List가 빈 배열을 반환한 것 같다 🙄
왜 인지 모르겠지만 ㅎ MySQL에 넣은 데이터가 제대로 반영됐다!!