sanguk.dev
작성완료
Spring CRUD 구현

Spring CRUD 구현

Spring CRUD 구현을 위해 필요한 의존성 설치, 설정 정보 주입, 컨트롤러, 서비스, 레포지토리, 엔티티 생성 방법을 설명합니다. 각 구성 요소의 코드 예시와 함께 MySQL 데이터베이스와의 연결 설정도 포함되어 있습니다.

JavaSpringSpring Boot

필요한 Depedencies 설치

  1. GraalVM Native Support
  2. Spring Boot DevTools
  3. LomBok
  4. Spring Configuration Processor
  5. Spring Web
  6. MySQL Driver
  7. Spring Data JPA

설정 정보 주입

/src/main/resources/application.properties

plain
# SERVERserver.port = 8080

# DBspring.datasource.url = jdbc:mysql://000.000.000.000:3306/DB_NAME
spring.datasource.username = root
spring.datasource.password = 0000
spring.datasource.driver-class-name = com.mysql.jdbc.Driver
spring.jpa.database = mysql
spring.jpa.show-sql = true

# LOGlogging.level.root = off

Controller 생성

/src/main/com/group/project/controller/UserController.java

java
package com.sanguk.restapi.controller;

import java.util.List;
import java.util.Map;
import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.sanguk.restapi.entity.User;
import com.sanguk.restapi.service.UserService;

import jakarta.websocket.server.PathParam;

@RestController
@RequestMapping("/api/user")
public class UserController {

  @Autowired
  private UserService userService;

  @GetMapping
  public List<User> getUsers(@PathParam("q") Optional<String> q) {
    return userService.getUsers(q.isEmpty() ? "" : q.get());
  }

  @PostMapping
  public void postUser(@RequestBody Map<String, Object> body) {
    String USR_NM = (String) body.get("USR_NM");
    userService.postUser(USR_NM);
  }
}

Service 생성

/src/main/com/group/project/service/UserService.java

java
package com.sanguk.restapi.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.sanguk.restapi.entity.User;
import com.sanguk.restapi.repository.UserRepository;

@Service
public class UserService {

  @Autowired
  public UserRepository userRepository;

  public List<User> getUsers(String q) {
    return userRepository.getUsers(q);
  }

  public void postUser (String USR_NM) {
    userRepository.postUser(USR_NM);
  }

}

Repository 생성

/src/main/com/group/project/repository/UserRepository.java

java
package com.sanguk.restapi.repository;

import java.util.List;

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

import com.sanguk.restapi.entity.User;

import jakarta.transaction.Transactional;

public interface UserRepository extends JpaRepository<User, Long> {

  @Query(value = "SELECT * FROM TB_USER WHERE USR_NM LIKE %:q%", nativeQuery = true)
  public List<User> getUsers(String q);

  @Query(value = "SELECT LAST_INSERT_ID() AS ID", nativeQuery = true)
  public Object getLastInsertId();

  @Query(value = "INSERT INTO TB_USER (USR_NM) VALUES (:USR_NM)", nativeQuery = true)
  @Modifying
  @Transactional
  public Object postUser(String USR_NM);

}

Entity 생성

/src/main/com/group/project/entity/User.java

java
package com.sanguk.restapi.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Data;

@Entity
@Data
@Table(name = "TB_USER")
public class User {

  @Id
  @Column(name = "USR_SQ")
  private Long sq;

  @Column(name = "USR_NM")
  private String nm;

  @Column(name = "USR_AGE")
  private Integer age;

  @Column(name = "USR_DEL_DT")
  private String del_dt;

  @Column(name = "USR_MOD_DT")
  private String mod_dt;

  @Column(name = "USR_CRT_DT")
  private String crt_dt;

}