준비물 : 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();
Read (Get) - index();
Read (Get) - getLanguages();
Update (Put) - updateLanguages();
만약 조회한 데이터가 없다면
Delete (Delete) - deleteLanguages();
'Study' 카테고리의 다른 글
CI/CD 파헤치기 (0) | 2023.10.06 |
---|---|
[Spring Boot]Spring boot + MyBatis + MariaDB 콜라보 (0) | 2023.09.22 |
[Spring] MVC 패턴 파헤치기 (0) | 2023.09.12 |
[Spring] @RequestBody, @RequestParam, @ModelAttribute 파헤치기 (0) | 2023.09.12 |
[Spring] Spring boot VS Spring Framework (0) | 2023.09.08 |