Spring Boot-JPA 연결

김민창·2022년 3월 10일
0
post-thumbnail

Spring BootJPA인프라 세팅의 A 부터 Z 까지

start.spring.io

  • 스프링 부트 프로젝트를 자동으로 만들어주는 start.spring.io에 들어가서 프로젝트를 다운받는다

  • mavengradle, 사용언어 및 버전, 이름 등을 입력한다

  • 사용할 Dependencies들을 아래 ADD... 를 선택하여 추가한다
    (여기서 추가 안하더라도 프로젝트 만들면서 추가할 수 있음)
  • Generate를 눌러 다운로드를 받는다

  • zip파일이 설치되는데 압축을 풀어 사용하는 IDE에서 연다.


jpa 연동

  • Dependencies는 다음과 같다

    • Spring Web
    • Spring Data JPA
    • Lombok
  • application.properties를 설정한다
# 사용할 포트 번호
server.port=9999

# 콘솔에 JPA 실행 쿼리 출력 여부
spring.jpa.show-sql=true

# Entity 어노테이션이 명시된 클래스를 찾아서 ddl를 생성후 실행할것인지 여부
spring.jpa.generate-ddl=true

# 어떤 데이터베이스를 사용하는지
spring.jpa.database=mysql

# 연결할 데이터베이스 서버 및 스키마
spring.datasource.url=jdbc:mysql://(서버주소)/(스키마 명)?serverTimezone=UTC&characterEncoding=UTF-8

# 해당 데이터베이스 계정
spring.datasource.username=pang

# 해당 데이터베이스 비밀번호
spring.datasource.password=1234

# JPA 데이터베이스 플랫폼 지정 (현재 MYSQL InnoDB를 사용중)
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect



jpa 데이터 입력

  • JPA는 내가 SQL을 내가 짜지않고 자동으로 맵핑하여 만들어주기 때문에 맵핑할 간단한 데이터를 추가한다

  • entity 패키지를 만들어 People를 만들어준다

// People.java

import lombok.Data;

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

@Data		// @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode를 한번에 만듬
@Entity		// 데이터베이스의 테이블과 일대일 매칭되는 객체
public class People {
    @Id		// PK 설정
    @GeneratedValue		// auto increment와 같은 기능
    private int id;
    private String name;
}

  • DAO 패키지도 만들어 People 인터페이스를 만들어준다

  • CrudRepository를 상속받아 기본적인 CRUD 관련 기능을 사용할 수 있도록 한다

// PeopleRepository.java

import com.pang.test.entity.People;
import org.springframework.data.repository.CrudRepository;

public interface PeopleRepository extends CrudRepository<People, Integer> {
}

  • PeopleController를 만들어 API를 받게 한다
// PeopleController.java

import com.pang.test.dao.PeopleRepository;
import com.pang.test.entity.People;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PeopleController {
    private PeopleRepository repository;

    public PeopleController(PeopleRepository repository){
        super();
        this.repository = repository;
    }

    @PostMapping("/people")
    public People addPeople(People people) { return (repository.save(people));}
}


테스트전 만난 에러

Failed to load driver class com.mysql.cj.jdbc.Driver
  • 위와 같은 에러를 만나서 한참을 고생했다

  • 에러 해석부터 하자면mysql-connector-java dependency가 없어서 발생하는 에러

  • 확인하는 방법1

    • pom.xml파일에 해당 dependency가 존재하는지 확인
  • 확인하는 방법2

    • pom.xml 우클릭
    • maven - Effective POM 표시에 해당 dependency가 존재하는지 확인
  • 하지만 나는 확인했을때 분명히 들어가있는데 발생했다

  • 해결하지못하고 다음날 확인하니깐 정상작동한다... 처음부터 다시 진행해봐도 같은 부분에서 에러가 발생하는데 IDE를 껐다가 천천히 하니깐 정상작동한다

  • 여기를 다시한번보고 마음을 추스렸다

  • 에러에 대한 추가 기술

Spring Data JPAmysql-connector-java가 포함되어있지만 별개로 추가해주면 에러가 발생하지 않는다
pom.xml을 우클릭-Maven-프로젝트 다시 로드 를 진행해주도록 하자


테스트

  • 테스트를 진행해보았다

  • 서버를 실행시키자 마자 mysql에 테이블이 생성되었다

  • POSTMAN으로 미리 만들어둔 API를 호출해보았다

  • 아까 테스트한번 해본다고 auto increment해놓은 id가 2가 되어있다

  • 몇가지 추가를 더해보고 mysql에서도 제대로 값이 나오는걸 확인했다

  • IDE에서 콘솔로 어떤 SQL이 실행되었는지 알수있다


굿

profile
개발자 팡이

0개의 댓글