SpringBoot MySQL 연동

roon2020·2021년 4월 19일
0

spring

목록 보기
11/16
post-thumbnail

Overview

크게 보면 다음 2가지 사항을 설정해 주면 됩니다.
1. DB 드라이버
2. 프로젝트에 DB 정보 알려주기

Spring boot 프로젝트 생성

Spring boot initializr로 프로젝트를 생성해 줍니다.
간단히 자바,웹,롬복 정도만 선택합니다.
mysql 커넥터는 나중에 의존성을 해결 해도 되긴 합니다.
바로 추가한다면 아래의 의존성을 추가합니다.

application.properties에 DB 연결 정보 설정

pom.xml 의존성 설정

시작하면서 선택한 웹,롬복 외에 필요한 라이브러리들을 설정합니다. 테스트를 위해 data-jpa를 설정했습니다. (앞서 설정한 mysql connector도 설정)

mysql 시작하기

어플리케이션을 구동하는 것으로 확인해도 됩니다. spring-data-jpa만 설정하고 DB 설정을 안하면 어플리케이션 구동 시에 에러가 발생합니다. DB 설정을 해주면 에러가 발생하지 않습니다.
설정을 했는데 에러가 발생한다면 serverTimezone=UTC로 했는지, mysql에서 생성한 계정에 모든 권한을 주었는지,DB가 있는지 등을 확인해 봐야합니다.

먼저 mysql 서버를 시작합니다.
인텔리제이로 돌아 와서 우측편에 database 탭을 누르고 +를 누르고 datasource > MySQL을 선택합니다.

여기서 test connection을 눌러서 연결이 되는지 확인합니다. mysql 커넥터가 없으면 커넥터가 없다고 표시될겁니다. 그 경고를 누르면 커넥터를 다운받아줍니다.
정상적으로 연결이 됐다면 database 탭에 DB가 연동되어 표시됩니다.

테스트

JPA로 간단히 테스트해 봅니다.

테이블과 매핑할 객체


@Getter
@Entity
@Table(name="employees")
public class Employee {
    @Id @GeneratedValue
    @Column(name="emp_no")
    private int id;

    @Temporal(TemporalType.DATE)
    @Column(name="birth_date")
    private Date birth_date;

    @Temporal(TemporalType.DATE)
    @Column(name="hire_date")
    private Date hire_date;

    @Column(name="first_name")
    private String firstName;

    @Column(name="last_name")
    private String lastName;

    @Column(name="gender")
    @Enumerated(EnumType.STRING)
    private Gender gender;

}

enum Gender{M,F}


DB를 확인하니 "emp_no"라는 필드가 primary key로 등록되어 있고, long이 아닌 int 타입이었습니다. 날짜타입은 Date대신 LocalDate를 써야할텐데.. DB에 Date로 되어 있길래 Date로 설정했습니다. JPA에선 날짜타입을 매핑할 때는 @Temporal을 사용합니다. DB에서 성별은 Enum으로 돼있어서 @Enumerated를 이용하여 매핑해줬습니다.

repository(DAO)


JpaRepository를 상속받으면 기본적인,간단한 CRUD는 모두 구현되어 있어서 구현없이 바로 사용할 수 있게 됩니다.

Controller


rest 형식으로 간단히 테스트 해보기 위해 @RestController를 사용했습니다. repository는 @RequiredArgsConstructor를 이용해서 생성자 묵시적 주입으로 의존성을 주입받은 것입니다.

hibernate(jpa)가 만들어준 쿼리

rest 요청,DB와 비교

마치며

MySQL을 WSL에 설치했는데도 다행히 윈도우 본 시스템에서 연동이 되네요. 어차피 로컬호스트+포트 번호로 프로세스가 특정이 돼서 그런것 같습니다.

profile
keep in positive mindset. I've got this.

0개의 댓글