[Spring] 2) DTO, Entity 생성

진주·2022년 3월 23일
0

Spring

목록 보기
27/29

DTO, Entity 생성하기

model - 폴더명 dto, entity 생성

DTO는 데이터를 담아서 옮겨주는 역할만 한다.
Service에서 데이터를 가공하고,

entity - 파일명 : Book.java, Order.java 생성

controller - 파일명 : OrderController.java, BookController.java 생성

dto - 파일명 : BookDTO.java 생성


1) Book.java 코드

package dev.book.bookorder.model.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.hibernate.annotations.ColumnDefault;

@Entity
public class Book {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY) // AUTO_INCREMENT 설정
  @Column(name ="BOOK_ID")
  private Long id;

  private String name;

  private String description;

  private String author;

  private int price;

  @Column(nullable = true)
  @ColumnDefault("0")
  private int amount;

  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getDescription() {
    return description;
  }

  public void setDescription(String description) {
    this.description = description;
  }

  public String getAuthor() {
    return author;
  }

  public void setAuthor(String author) {
    this.author = author;
  }

  public int getPrice() {
    return price;
  }

  public void setPrice(int price) {
    this.price = price;
  }

  public int getAmount() {
    return amount;
  }

  public void setAmount(int amount) {
    this.amount = amount;
  }
  
  
}

2) Order.java 코드

MySQL에 order라는 예약어가 있기 때문에 Orders로 변경해야했다.

package dev.book.bookorder.model.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
@Table(name="ORDERS")	// MySQL 예약어와 충돌하지 않기 위함
public class Order {
  
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name="ORDER_ID")
  private Long id;

  private String userName;

  private String address;

  private int totalPrice;

  // Order 1개에 book이 여러개 가능, Order이 연관관계 주인(N)이다.
  @ManyToOne
  @JoinColumn(name ="BOOK_ID")  // Book의 id와 Order의 id
  private Book book;

  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public String getAddress() {
    return address;
  }

  public void setAddress(String address) {
    this.address = address;
  }

  public int getTotalPrice() {
    return totalPrice;
  }

  public void setTotalPrice(int totalPrice) {
    this.totalPrice = totalPrice;
  }

  public Book getBook() {
    return book;
  }

  public void setBook(Book book) {
    this.book = book;
  }

}

3) BookDTO.java 코드

package dev.book.bookorder.model.dto;

import dev.book.bookorder.model.entity.Book;

public class BookDTO {
  private Long id;
  private String name;
  private String description;
  private String author;
  private int price;
  private int amount;

  // entity는 기본 생성자를 반드시 생성해야하지만, DTO는 생성하지 않아도 ok

  // DB는 Entity로 반환하므로, DTO로 타입을 변환해야한다.
  // Book book = **Book entity**에 있는 정보를 BookDTO에 맵핑하는중
  // 실제 화면에서 사용할 것만 book entity에서 가져오면 된다
  public BookDTO(Book book){
    this.id = book.getId();
    this.name = book.getName();
    this.description = book.getDescription();
    this.author =book.getAuthor();
    this.price = book.getPrice();
  }

  public Long getId() {
    return id;
  }
  public void setId(Long id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getDescription() {
    return description;
  }
  public void setDescription(String description) {
    this.description = description;
  }
  public String getAuthor() {
    return author;
  }
  public void setAuthor(String author) {
    this.author = author;
  }
  public int getPrice() {
    return price;
  }
  public void setPrice(int price) {
    this.price = price;
  }
  public int getAmount() {
    return amount;
  }
  public void setAmount(int amount) {
    this.amount = amount;
  }
}

BookController.java 코드

package dev.book.bookorder.controller;

import java.util.List;

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;

@RestController
@RequestMapping("/api/v1/books") // localhost:8090/api/v1/books~
// GET localhost:8090/api/v1/books~ : 전체 책 데이터 가져오기
public class BookController {

  // GetMapping을 적지 않으면 = localhost:8090/api/v1/books
  @GetMapping()
  public List<BookDTO> findAllBooks(){
    // service -> repository -> DB
    // 전체 책 데이터 조회
    return null;
    
  }
}

까지만 적고 실행해보기

실행은 BookorderApplication.java에서 F5 누르면 된다 !


DB에 재대로 추가 됐는지 확인하기 (MySQL)

1) 모든 DB 조회 : show databases;
2) DB 생성 : create database DB이름;
3) 현재 사용 중인 DB 조회 : select database();
4) 사용할 DB로 변경 : use DB이름;
5) 현재 사용 중인 DB가 갖고 있는 Table 조회 : show tables;
6) Table 정보 조회 : desc Table명
7) Table 데이터 조회 : select * from Table명;

show databases;

use testdb;, show tables;, desc book; , desc orders; 결과

profile
진주의 코딩일기

0개의 댓글