본문 바로가기

프로젝트 & TIL/일별 공부 기록 (백엔드 스쿨)

19일차 - 스프링부트와 DB 연결하기, Spring Data JPA

SELECT VERSION();

Maria DB인지 MySQL인지 확인하기


@RequiredArgsConstructor

필드 중에서 final이 붙은 것만 인자로 입력받는 생성자를 만든다.

@NoArgsConstructor

인자가 없는 기본 생성자를 만든다.


git reset HEAD^

최신 커밋 취소


스프링부트와 DB 연결하기

  implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
  runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'

build.gradle 파일에 추가


 

server:
  port: 8010   // 서버 포트
spring:
  thymeleaf:   // 타임리프 캐시 끄기
    cache: false
    prefix: file:src/main/resources/templates/
  devtools:
    livereload:
      enabled: true
    restart:
      enabled: true
  datasource:
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://127.0.0.1:3306/DB이름?useUnicode=true&characterEncoding=utf8&autoReconnect=true&serverTimezone=Asia/Seoul
    username: // DB 아이디
    password: // DB 비밀번호
  jpa:
    hibernate:
      ddl-auto: create   // DB 테이블 자동 생성, 엔티티 클래스만 만들면 된다.
    properties:
      hibernate:
        show_sql: true   // sql문을 보여준다.
        format_sql: true   // sql문을 보기 좋게 포맷팅해준다.
        use_sql_comments: true

 

application.properties -> application.yml 로 변경 후 위 내용 작성

- 127.0.0.1 와 localhost는 같다.

  

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;

@Entity
public class Article {
    @Id
    @GeneratedValue(strategy = IDENTITY)
    private long id;
    private String subject;
    private String text;
}

엔티티 클래스 생성

- article 테이블이 만들어진다.

- @Id가 붙으면 PK, @GeneratedValue(strategy = IDENTITY) 는 auto_increment

  

SHOW TABLES;
DESC article;

SQLyog에서 테이블 생성되었는지 확인하기


Repository.java

import org.springframework.data.jpa.repository.JpaRepository;

public interface Repository extends JpaRepository<엔티티_클래스, PK_데이터_타입> {
}

@Repository 안 붙여도 됨. 꼭 interface & JpaRepository<> 를 extends 해야 함

  

Service.java

@Service
@RequiredArgsConstructor
public class Service {

    private final Repository repository;

    public Article write(String title, String body) {
        Article article = Article
                .builder()
                .title(title)
                .body(body)
                .build();

        repository.save(article);

        return article;
    }
}

Article 클래스에 @Builder 어노테이션을 붙이면 위의 문법(.builder()....build();) 실행 가능

(@Builder 어노테이션 붙였을 때 Article 클래스에 빨간 줄 뜨면 @AllArgsConstructor, @NoArgsConstructor 둘 다 붙이면 됨. 실행도 OK)


@CreatedDate 작동시키기

Application.java

@EnableJpaAuditing
public class Application {
}

  

Article.java

@EntityListeners(AuditingEntityListener.class)
public class Article {

    @CreatedDate
    private LocalDateTime createDate;
    
}

@EnableJpaAuditing, @EntityListeners(AuditingEntityListener.class), @CreatedDate 어노테이션 붙이기

.builder().createDate(LocalDateTime.now())... 작성하지 않아도 row에 자동으로 생성된다.


Spring Data JPA

JPA 구현체를 쉽게 사용하기 위해 Spring framework에서 제공하는 일종의 프레임워크

반복 작성되는 메서드를 자동화하여 기본적인 CRUD 메서드를 제공한다.

Spring Data JPA => JPA => hibernate (JPA 구현체) => JDBC Driver => JDBC Driver(Maria DB Driver) (JDBC Driver 구현체) => Maria DB

표준(규약)과 그것을 구현한 구현체가 있다.

JPA, JDBC는 표준. 실질적으로는 Spring Data JPA => JPA => JDBC Driver => Maria DB