관리 메뉴

CASSIE'S BLOG

JPA 본문

PROGRAMMING/JAVA SPRING

JPA

ITSCASSIE1107 2024. 1. 16. 15:25

JPA는 데이터 그 자체가 아니라, Java 어플리케이션의 객체와 관계형 데이터베이스 간의 매핑을 담당하는 자바 표준 인터페이스입니다.

 

 



package com.dailycodework.lakesidehotel.model;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.time.LocalDate;

/**
 * @author Simpson Alfred
 */
@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class BookedRoom {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private  Long bookingId;

    @Column(name = "check_in")
    private LocalDate checkInDate;

    @Column(name = "check_out")
    private LocalDate checkOutDate;

    @Column(name = "guest_fullName")
    private String guestFullName;

    @Column(name = "guest_email")
    private String guestEmail;

    @Column(name = "adults")
    private int NumOfAdults;

    @Column(name = "children")
    private int NumOfChildren;

    @Column(name = "total_guest")
    private int totalNumOfGuest;

    @Column(name = "confirmation_Code")
    private String bookingConfirmationCode;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "room_id")
    private Room room;

    public void calculateTotalNumberOfGuest(){
        this.totalNumOfGuest = this.NumOfAdults + NumOfChildren;
    }

    public void setNumOfAdults(int numOfAdults) {
        NumOfAdults = numOfAdults;
        calculateTotalNumberOfGuest();
    }

    public void setNumOfChildren(int numOfChildren) {
        NumOfChildren = numOfChildren;
        calculateTotalNumberOfGuest();
    }

    public void setBookingConfirmationCode(String bookingConfirmationCode) {
        this.bookingConfirmationCode = bookingConfirmationCode;
    }
}

 

@Entity 애노테이션을 사용하여 JPA에게 이 클래스가 데이터베이스 엔터티임을 알려줍니다.

 

일반적으로 Spring 프로젝트에서 데이터베이스 연결 정보는 src/main/resources/application.properties 또는 src/main/resources/application.yml 파일에 저장됩니다.

 

 




server.port=9192

spring.datasource.url=jdbc:mysql://localhost:3306/lakeSide_hotel_db
spring.datasource.username=root
spring.datasource.password=admin

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQLDialect


spring.servlet.multipart.max-file-size=500KB
spring.servlet.multipart.max-request-size=500KB

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=update


logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

# App Properties

auth.token.expirationInMils=3600000
auth.token.jwtSecret=36763979244226452948404D635166546A576D5A7134743777217A25432A462D

 

  • jdbc:mysql://localhost:3306/lakeSide_hotel_db: MySQL 데이터베이스에 연결하는 JDBC URL로, localhost는 데이터베이스 서버의 주소, 3306은 MySQL 포트 번호, lakeSide_hotel_db는 사용하는 데이터베이스의 이름입니다.
  • spring.datasource.username=root: MySQL 데이터베이스에 연결할 때 사용되는 사용자 이름입니다.
  • spring.datasource.password=admin: MySQL 데이터베이스에 연결할 때 사용되는 비밀번호입니다.
  • spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver: MySQL JDBC 드라이버 클래스를 지정합니다.
  • spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect: Hibernate에 사용할 MySQL 데이터베이스의 SQL 방언을 설정합니다.

따라서, 주어진 설정을 통해 해당 Spring Boot 어플리케이션은 MySQL 데이터베이스 (lakeSide_hotel_db)에 연결하고 사용하고 있습니다.

 

 

저걸 쓰려면 LOCAL에도 MYSQL 있어야하는거지? 그리고 데이터베이스 관련 파일들이 이썽야하는거지?
 
 
 

네, 맞습니다. 주어진 설정을 통해 Spring Boot 어플리케이션은 MySQL 데이터베이스를 사용하고 있습니다. 따라서 해당 어플리케이션을 로컬에서 실행하려면 로컬 환경에 MySQL이 설치되어 있어야 하며, 사용자명과 비밀번호가 설정된 대로 MySQL에 연결할 수 있어야 합니다.

 

로컬에 MySQL이 설치되어 있지 않은 경우에는 MySQL을 설치하고, 설정된 데이터베이스(lakeSide_hotel_db)를 생성해야 합니다. 또한, 사용자명(root)과 비밀번호(admin)를 사용할 수 있는 계정을 생성해야 합니다.

 

Spring Boot 어플리케이션을 로컬에서 실행하는 경우, Hibernate의 설정에 따라 데이터베이스 스키마가 자동으로 생성될 수 있습니다. spring.jpa.hibernate.ddl-auto 속성이 update로 설정되어 있으므로, 데이터베이스 테이블이 없는 경우 Hibernate가 해당 테이블을 생성할 것입니다.

 

데이터베이스 스키마가 자동으로 생성되는 것이 원치 않은 경우, 생성되는 테이블의 스키마 등을 미리 정의하고, spring.jpa.hibernate.ddl-auto 속성을 none으로 설정하여 자동 생성을 비활성화할 수 있습니다.

 

또한, 로컬 개발환경에서 사용하는 데이터베이스와 실제 운영환경에서 사용하는 데이터베이스가 다를 수 있습니다. 이는 Spring 프로파일이나 설정 파일을 통해 관리할 수 있습니다.

 
 
 
반응형

'PROGRAMMING > JAVA SPRING' 카테고리의 다른 글

Spring Boot - Bean  (1) 2024.01.02
Spring 개념정리  (0) 2023.11.29
멤버변수 개념  (0) 2023.10.12
토비의 스프링 3.1 요약 정리  (4) 2023.06.12
[비공개] 스프링 AOP  (0) 2023.06.10