Loading...

Spring/Blog-V1 / / 2022. 3. 2. 16:16

스프링 17강. 스프링 DB 연결

반응형

dbproject를 새로 만들어보자.

 

다른 과정은 다 똑같지만

라이브러리를 추가로 2개 더 받아줄 것이다.

 

 

 


 

(1)

 

우선 설정 파일부터

application.yml로 바꿔준다.

 

https://jaewon2336.tistory.com/235

 

스프링 16강. application.yml 설정 파일

server: port: 8080 servlet: context-path: / encoding: charset: utf-8 spring: datasource: url: jdbc:mariadb://localhost:3306/greendb driver-class-name: org.mariadb.jdbc.Driver username: green passwor..

jaewon2336.tistory.com

 


 

(2)

 

테이블을 생성해주자.

dbproject 아래 폴더를 만들어준다.

 

model을 만드는 것인데

최근에는 모델 만드는 폴더 이름을

domain이라고 한다.

 

domain 폴더를 하나 만들어주자.

컨트롤러를 만드는 폴더 이름은

요즘에 web으로 많이 만든다.

 

JPA (Java Persistence API) : 프로세스가 생성했지만 별개로 유지되는 상태의 특징 중 하나

별도의 기억장치에 데이터를 보존하는 것을 목적으로 한다.

 

자바언어로 데이터베이스에 영구적으로

저장할 수 있는 메서드를 제공해주는 것이다.

 


이때까지 데이터베이스의 테이블을 먼저 만들어준 후

자바 세상으로 모델링하여 오브젝트를 만들어주었다.

 

이제 JPA 라이브러리를 사용하면

자바 코드로 DB를 자동으로 생성해주는 기능을 제공한다!

 

JPA가 테이블을 자동으로 만들어 줄 때

이 테이블의 Primary Key가 무엇인지 알 방법이 없다.

 

이를 알려주기 위해 PK로 지정할 변수 위에

@Id 어노테이션을 붙여준다.

 

 


PK의 번호 증가 전략을 지정해줄 때

오라클에서는 시퀀스,

마리아 DB와 MySQL은 auto_increment를 사용한다.

 

이 전략을 설정해주기 위해

@GeneratedValue 어노테이션을 사용한다.

 

전략을 IDENTITY로 설정하면 된다!

DB에게 번호 증가 전략을 위임하는 것이다.

알아서 DB에 맞게 찾아준다.

@GeneratedValue(strategy = GenerationType.IDENTITY)

 


MariaDB에서는 Integer타입은 int로,

String은 VARCHAR 타입으로 받는다.

 

VARCHAR의 크기를 지정해줘야 했던 게 기억날 것이다.

 

내가 직접 크기를 지정해주지 않으면

디폴트로 크기가 VARCHAR(255)로 잡힌다.

 

크기를 지정해줄 변수 위에

@Column 어노테이션을 붙여준다.

 @Column(length = 20, unique = true, nullable = true)

 

만약 VARCHAR의 max 크기를 벗어나는 length를 지정해주면

알아서 longtext타입으로 바뀐다.

@Column(length = 16000000)

 


 

마지막으로 클래스 위에

@Entity 어노테이션을 붙여주면

서버 실행 시에 해당 클래스로

테이블을 생성해준다.

package site.metacoding.dbproject.domain.user;

import java.time.LocalDateTime;

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

// 테이블을 자바세상에 옮기는게 모델링
// JPA 라이브러리는 Java Persistence(영구적인 저장) API(노출되어 있는 메서드)
// 1. CRUD 메서드 기본 제공
// 2. 자바코드로 DB를 자동 생성 기능 제공 -> 지금 배워보자! -> 설정 필요!
// 3. ORM 제공 - 이 부분은 지금 몰라도 됨

@Entity // 서버 실행 시 해당 클래스로 테이블을 생성해!!
public class user {
    // IDENTITY 전략은 DB에게 번호증가 전략을 위임하는 것 -> 알아서 디비에 맞게 찾아줌
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id; // PK

    @Column(length = 20, unique = true) // VARCHAR(20) 길이설정
    private String username; // ssar 아이디

    @Column(length = 12, nullable = false)
    private String password;

    // varchar의 크기를 벗어나는 length를 넣으면 알아서 longtext타입으로 바뀐다!
    @Column(length = 16000000)
    private String email;

    // 시간 -> DB는 LocalDateTime 타입이 없으니까 알아서 datetime 타입으로 바뀜!
    // 자바에선 커멜표기법인데 디비는 언더바가 디폴트임
    // 내가 설정한 이름 그대로 설정되게 하는 기능이 있음
    private LocalDateTime createDate;
}

 

 


데이터베이스에서 새로고침 해보면

성공적으로 테이블이 생성되었다.

 

자바 user 모델에 상태 하나 추가하고

다시 데이터베이스 새로고침 해보자.

private String phone;

바로 추가됨!! 미쳤다!!

 


 

USE greendb;

INSERT INTO user(username, password) VALUES('ssar', '1234');

COMMIT;

SELECT * FROM user;

create설정이 서버 실행할 때마다 테이블을 삭제한 후

다시 만드는 설정이었다.

 

User 클래스에 스페이스바 하나 넣고 서버 리로드 한 후

다시 SELECT 해보면

INSERT 했던 데이터가 사라져 있다.

 

 

그렇기 때문에 테이블을 한번 만든 후에는

설정을 none으로 바꾸어 줘야 한다.

 

다시 INSERT, COMMIT, SELECT 해본 후

설정 파일에 none으로 바꿔준다.

 

바꾼 후에 다시 서버 리로드 하고 SELECT로 확인해보면

데이터가 날아가지 않고 가지고 있다.

 

다시 테이블에 변경이 필요하다면

create로 바꾸고,

바꾼 다음 none으로 변경해주면 된다.

 

 

 

 

[출처]

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com


메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 

 

반응형