Study/Spring

[Spring] Spring mySql 연결 + JPA

dev_kong 2023. 1. 4. 15:26
728x90
728x90

인텔리J 유료버전 기준으로 작성된 글 입니다
Java Version 11

 

[Spring] 스프링 부트 시작하기. Hello, World!
[Spring] form 태그와 JSON 형식을 이용한 요청
과 이어지는 내용입니다.

 

라이브러리 의존성 추가

 

우선 build.gradle을 열어서 dependencies에다가 mySqlJPA라이브러리 의존성을 추가해주자.

 

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

 

이 위에 두개를 붙여 넣으면 된다.

 

runtimeOnly는 컴파일 시점에는 필요없지만 실행 시점에는 꼭 필요한 라이브러리의 의존성을 추가할 때 사용한다.

 

application.properties

 

resource 패키지를 확인해보면, application.properties 라는 파일을 확인할 수가 있는데,
여기다가 mySql 연결을 위한 값들을 입력 해주면 된다.

 

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/spring
spring.datasource.username=id
spring.datasource.password=pw
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true

 

각각의 내용은 아래를 참고하면 된다.

 

url => jdbc:mysql://[ip주소]:[port]/DB이름
username => mysql 유저네임
password => mysql 비밀번호
show-sql => 실행되는 query문 console에 출력
ddl-auto => 서버 실행 시 entity의 내용으로 테이블을 생성 여부

  • create : 서버 실행시 테이블 생성(기존 내용 삭제됨)
  • update : 서버 실행시 변경사항 있으면 실행, 테이블 없으면 자동 생성
  • none : 실행 안함
  • format-sql* => console에 출력되는 query문 가독성을 위한 포맷여부

 

Entity 생성

바로 위에서 ddl-auto 옵션 설정을 통해,
entity의 내용으로 테이블을 생성할 수 있게끔 세팅 했다.

 

entity를 만들어서 잘 db 연결이 잘 되는지 확인을 해보자.

 

domain package를 하나 생성하고,
그 안에 User라는 클래스를 생성하자.

 

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long idx;

    @Column
    private String userId;

    @Column
    private String userPw;

    public User() {
    }

    public User(String userId, String userPw) {
        this.userId = userId;
        this.userPw = userPw;
    }
}

 

요렇게 내용을 채워주면 된다.
이렇게 하고 보니 Nest.js와 상당히 유사하다고 느껴진다.

 

User class는 3가지의 필드를 지니고 있다.

인덱스와, 유저아이디, 유저 패스워드이다.

 

각각의 역할에 맞게 어노테이션을 선언해주면 된다.

 

인덱스 같은 경우는 Primary Key이며, 값이 자동으로 증가될 수 있게끔 auto_increment 옵션을 넣어주고 싶기에,
@Id@GeneratedValue(strategy = GenerationType.IDENTITY)을 적용 시켰고,

 

그외의 나머지 값들은 @Column을 적용시켜 주었다.

 

그리고 특이하게 생성자가 두개이다.

하나는 기본 생성자와, 또 하나는 인자값을 받는 생성자 인데,
setter를 만들고 싶지 않아서 인자값을 받은 생성자를 추가해주었더니,
기본생성자도 추가하라고, 알림이 떠서 추가해주었다.

 

왜 이렇게 해줘야 하는지 검색을 해보긴 했는데 아직 잘 이해가 되지 않는다.
따로 공부를 해봐야 겠다.

 

무튼 이렇게 해놓고 서버를 다시 실행시키면 된다.

서버를 실행시키면,

 


console에서 테이블 생성 쿼리가 실행되는 것을 확인할 수 있다.

터미널에서 mysql에 접속하여 결과를 확인해보면,

 

테이블이 추가된 것을 확인할 수 있다.

728x90
728x90