스프링부트 JPA와 MySQL 연동

Dami·2024년 1월 18일
0

SPRING

목록 보기
11/14
post-thumbnail

build.gradle 설정과 DB 만들기

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'mysql:mysql-connector-java:8.0.32'

그 후에 IDE를 이용하거나 shell 창을 이용해 create database (DB 이름)를 진행한다.

스프링과 연동

**main/resources 안에 application.properties에 다음을 추가한다.

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:[포트]/[데이터베이스 이름]
spring.datasource.username=[이름]
spring.datasource.password=[비밀번호]

spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=update

엔터티 만들기 (예시)

1. Question

package com.mysite.sbb;

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

import java.time.LocalDateTime;

@Getter
@Setter
@Entity 
public class Question {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(length = 200)
    private String subject;

    @Column(columnDefinition = "TEXT")
    private String content;

    private LocalDateTime createDate;
}
  • @Getter ,@Setter : Getter와 Setter method를 자동으로 생성하기 위해

  • @Entity : Question 클래스를 엔터티로 만들기 위해. 즉, 스프링 부트가 Question class를 엔터티로 인식시키 위해 사용한다.


  • @Id : id 애너테이션은 id 속성을 기본키로 지정.

  • @GeneratedValue : 데이터를 저장할 때 해당 속성 값을 입력하지 않아도 자동으로 1씩 증가해 저장

    • 옵션 strategy = GenerationType.IDENTITY : 해당 속성만 별도로 번호가 차례대로 늘어나도록 사용. => 이 strategy 옵션을 생략하면 이 어노테이션이 지정된 모든 속성에 번호를 차례대로 생성하기 때문에 보통 이 옵션을 많이 사용
  • @Column : 엔터티 클래스에서 데이터베이스의 col과 매핑할 이름을 지정하기 위해 사용

    @Column(name = "STUDENT_NAME")
    private String name;

    을 하면 student_name varchar(255)가 생성됨

    @Column(columnDefinition = "varchar (100) default 'EMPTY'")
    private String subject;

    결과 => subject varchar (100) default 'EMPTY' 가 생성

2. Answer

package com.mysite.sbb;

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

import java.time.LocalTime;

@Getter
@Setter
@Entity
public class Answer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(columnDefinition = "TEXT")
    private String content;

    private LocalTime createDate;

    @ManyToOne
    private Question question;
}
  • @ManyToOne : N:1 관계를 나타낼 때 사용 ⇨ 데이터베이스에서 외래키 관계가 생성됨.
    (부모-자식 관계를 가질 때 사용 -> 부모 : Question, 자식 : Answer)

    - 유사 : `@OneToMany`, `@ManyToMany`
    - `@OneToMany`인 경우 옵션으로 `@OneToMany(mappedBy = "question", cascade = CascadeType.REMOVE)`를 줄 수 있음
    → 예를 들어 게시글이라고 하면 삭제할 때 답변도 같이 삭제되게 처리되게 해줌.

최종적으로 이 두개를 실행시키면 Answer table과 Questions table이 DB에 만들어져 있다.

출처 : 점프 투 스프링부트, MySQL과 연동

0개의 댓글