본문 바로가기
Study

[Spring boot]MariaDB Sample Database로 RESTful API 만들기

by jisayDeveloper 2023. 9. 21.
728x90
반응형
SMALL

준비물 : Spring boot , Post man

 

https://www.mariadbtutorial.com/getting-started/mariadb-sample-database/

 

MariaDB Sample Database

In this tutorial, you will learn about a MariaDB sample database nation and how to load the sample database into the MariaDB server.

www.mariadbtutorial.com

위 사이트를 들어가면 sample db로 연습할 수 있게 안내 페이지가 나오는데 여기 나오는 sample db에 languages table로 CRUD 기능을 구현한 RESTful API를 만들어 보겠습니다.

 

저는 기존 사용하던 계정에 연결해서 sample db 생성하는 법을 간단히 보여드리겠습니다.

 

위 사이트에서 sql 파일을 받으시고 압축을 푸신 다음 경로 잘 기억하시고 

'SQL 파일 불러오기' 누르면  

이렇게 파일이 불러와지고 실행을 하면

이렇게 db가 생성된 걸 보실 수 있습니다.


프로젝트 설정

  • Java : 11
  • Spring boot version : 2.7.15
  • Type : Groovy
  • Dependency : Spring Web, Lombok, Spring Data JPA, MariaDB Driver 
    (저는 DevTools 하긴 했는데 해도 되고 안 해도 됩니다. DevTools = 코드 변경되면 자동으로 어플리케이션 재시작)

application.properties

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/nation
spring.datasource.username=your id
spring.datasource.password=your password

Entity

@Entity
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Languages {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(length = 11)
    private Integer languageId;

    @Column(length = 50)
    private String language;
}

컬럼의 설정에 맞춰 Language 엔티티를 만들어 줍니다.


Repository

public interface LanguageRepository extends JpaRepository<Languages, Integer> {

}

우리 대신 일할 JpaRepository를 만들어주고 Language 객체와 키값의 타입인 Integer를 제네릭해줍니다.


Controller

package com.example.ack.controller;

import com.example.ack.entity.Languages;
import com.example.ack.repository.LanguageRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequiredArgsConstructor
public class MainController  {

    final LanguageRepository languageRepository;

    @GetMapping("")
    public List<Languages> index(){

        List<Languages> list = languageRepository.findAll();

        return list;
    }

    @GetMapping("/{num}")
    public ResponseEntity<?> getLanguages(@PathVariable int num) {
        Languages languages = languageRepository.findById(num).orElse(null);

        if (languages == null) {
            String msg = "데이터가 없습니다.";
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body(msg);
        }

        return ResponseEntity.ok(languages);
    }

    @PutMapping("/modify/{num}/{newLanguage}")
    public ResponseEntity<String> updateLanguages(@PathVariable int num, @PathVariable String newLanguage) {
        Languages languages = languageRepository.findById(num).orElse(null);

        if (languages == null) {
            String errorMessage = "데이터가 없습니다.";
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body(errorMessage);
        }else{
            languages.setLanguage(newLanguage);
            languageRepository.save(languages);
            String msg = num + " : " + newLanguage + "로 변경이 완료되었습니다";
            return ResponseEntity.ok(msg);
        }
    }
    @DeleteMapping("/erase/{num}")
    public ResponseEntity<String> deleteLanguages(@PathVariable int num){
        Languages languages = languageRepository.findById(num).orElse(null);

        if (languages == null) {
            String errorMessage = "삭제할 데이터가 없습니다.";
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body(errorMessage);
        }else{
            languageRepository.delete(languages);
            String msg = num + " : " +languages.getLanguage() + "가 삭제 됐습니다.";
            return ResponseEntity.ok(msg);
        }

    }
    @PostMapping("/addLanguage/{newLanguage}")
    public ResponseEntity<String> addLanguage(@PathVariable String newLanguage){

           Languages create = Languages.builder()
                    .language(newLanguage)
                    .build();
            languageRepository.save(create);
            String msg = create.getLanguageId() + " : " + newLanguage + "로 추가 완료되었습니다";
            return ResponseEntity.status(HttpStatus.CREATED).body(msg);
    }


}

간단하게 구현하기에 따로 서비스를 만들진 않았습니다.

 

이제 Post man 으로 잘 작동하는 지 확인해볼게요

CRUD

Create (Post) - addLanguage();

 

키값에 @GeneratedValue(strategy = GenerationType.IDENTITY)어노테이션을 줬기 때문에 id는 자동으로 시퀀스에 맞게 save 됩니다.

Read (Get) - index();

1번 부터 457번까지 잘나옵니다.

Read (Get) - getLanguages();

찾고자 하는 번호 검색해도 잘나옵니다.

 

Update (Put) - updateLanguages();

업데이트할 번호를 조회하고 데이터가 있으면 원하는 이름으로 바꿀 수 있습니다.

만약 조회한 데이터가 없다면 

터무니 없는 번호 4633을 입력하니 데이터가 없다고 응답이 옵니다.

Delete (Delete) - deleteLanguages();

아까 만들었던 461번 jisay 데이터가 삭제됐다는 걸 확인할 수 있습니다.

 

728x90
반응형
LIST