SpringBoot 스프링 부트 JPA를 통해 DB 연동하기(MariaDB)

동키·2024년 10월 30일

SpringBoot

목록 보기
4/5

1. 필요한 Dependencies

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



Intellij를 사용한다면 dependencies 옆에 생기는 Edit Starters...를 눌러 처음 프로젝트 생성 할 때 처럼 검색을 통해 간편히 추가도 가능하다

2. MariaDB 및 JPA로깅 설정

application.properties에 DB, JPA 관련 설정 추가

# mariaDB 설정
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://[IP주소]:[포트번호]/[데이터베이스 명]
spring.datasource.username=[사용자 이름]
spring.datasource.password=[비밀번호]


# JPA 로깅 설정
logging.level.org.hibernate.SQL=DEBUG
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.orm.jdbc.bind=TRACE

logging.level.org.hibernate.SQL=DEBUG
-> 디버그 레벨로 쿼리 출력
spring.jpa.properties.hibernate.format_sql=true
-> 쿼리 줄바꿈하기 이 설정이 없으면 한줄로 나옴
logging.level.org.hibernate.orm.jdbc.bind=TRACE
-> 매게변수 값 보여 주기

3. JPA로 DB연동 하기

3-1. Entity

DB의 테이블과 매칭시킬 Entity 클래스 만들기

@AllArgsConstructor
@NoArgsConstructor
@ToString
@Getter
@Setter
@Entity
@Table(name = "article")
public class Article {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column//(name = "id")
    private Long id;
    @Column//(name = "title")
    private String title;
    @Column//(name = "content")
    private String content;
}

@AllArgsConstructor부터 ~ @Setter까지의 어노테이션은 코드작성의 편의성을 도와주는 lombok관련 어노테이션
@Entity는 JPA가 해당 클래스를 관리하여 DB의 테이블과 매칭시켜주게 한다
@Table은 Entity와 매핑할 테이블을 지정 name 속성으로 테이블 이름 입력

@Column은 객체 필드를 테이블의 컬럼과 매칭시켜줌

@Id는 해당 필드가 기본키(PrimaryKey)임을 나타냄
@GeneratedValue는 기본키의 기본값 생성 전략을 DB에 위임하겠다는 뜻으로 DB의 종류마다 다르게 strategy 속성 값을 지정해주어야함
-> 예로 MariaDB, MySQL등은 IDENTITY를 사용
-> AUTO를 사용하면 DB에 맞게 자동으로 바뀐다던데 해보니 에러가 뜬다 좀더 알아봐야 할 듯

  • 기본값 생성 전략이란 테이블의 행이 추가될때 해당 컬럼의 기본값을 지정하는 방법을 선택하는 것으로 기본값을 공백으로 할지 null 자동증가를 할지 등을 결정

3-2. Repository

SPRING DATA JPA는 DB조작을 위한 메서드 들을 인터페이스로 제공해줌
인터페이스의 종류도 다양한데 JpaRepository 인터페이스가 대부분 상속받고 있기 때문에 일단 JpaRepository를 사용하면 대부분의 메서드를 사용이 가능할 듯 하다

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

public interface ArticleRepository extends JpaRepository<Article, Long> {
}

상속받을때 JpaRepository<Entity클래스, id필드(기본키)타입>과 같이 작성해주면 된다
기존 메서드들을 커스텀하고 싶으면 오버라이드해서 재정의 하면 된다

3-3. 조회 기능 구현

@Slf4j
@RestController
public class ArticleApiController {
    @Autowired
    private ArticleRepository articleRepository;

    // GET
    @GetMapping("/api/articles")
    public List<Article> index() {
        return articleRepository.findAll();
    }
}

@RestController : 조회 결과를 http통신을 통해 JSON으로 간단하게 확인해보기 위해 RestController를 사용

@Autowired를 통해 JpaRepository를 상속받은 인터페이스를 가져옴
articleRepository.findAll()을 사용해 테이블의 모든 데이터 조회한 값을 리턴시켜준다

3-4. 결과 확인


-> 실제 테이블 데이터

[
    {
        "id": 1,
        "title": "sdfsdf",
        "content": "222222221"
    },
    {
        "id": 2,
        "title": "222222",
        "content": "ㅇㄴㅇ솟ㄹ온ㄹㅇ송ㄴㅇ고"
    },
    {
        "id": 3,
        "title": "abcdef",
        "content": "ddd"
    },
    {
        "id": 4,
        "title": "ㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ",
        "content": "123456"
    },
    {
        "id": 5,
        "title": "ddd",
        "content": "ddd"
    },
    {
        "id": 6,
        "title": "sfssffse",
        "content": "eesfesfsefe"
    },
    {
        "id": 7,
        "title": "ffff",
        "content": "fff"
    }
]

->Response Body 응답 결과 JSON 확인

profile
오키동키

0개의 댓글