관계형 데이터베이스가 지원하는 Spring Boot에서 CRUD Rest 서비스를 구현하는 방법

Spring Boot에서 Restful WebService를 구현하는 것은 Core Spring에 비해 상대적으로 쉽습니다. 프레임워크 자체가 무거운 작업을 수행하므로 개발자는 비즈니스 로직에만 집중하면 됩니다.

다음은 개발자가 Spring Boot를 사용하여 간단한 CRUD Rest Service를 구현하기 위해 따라야 하는 주요 단계입니다.
  • 웹사이트 [ https://start.spring.io ]로 이동하여 샘플 Spring Boot 프로젝트 스켈레톤을 생성합니다.
  • pom.xml 파일에는 다음과 같은 종속성이 있어야 합니다.

  • <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    


  • 이 예에서는 MySQL 데이터베이스를 사용하고 있습니다. src/main/resources 폴더의 application.properties 파일은 다음과 같아야 합니다.

  • spring.datasource.url = jdbc:mysql://localhost:3306/<Database_Name>?useSSL=false
    spring.datasource.username = <Your User Name>
    spring.datasource.password = <Your Password>
    
    
    ## Hibernate Properties
    # The SQL dialect makes Hibernate generate better SQL for the chosen database
    spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
    
    # Hibernate ddl auto (create, create-drop, validate, update)
    spring.jpa.hibernate.ddl-auto = update
    
    


  • 데이터베이스 테이블의 구조와 일치해야 하는 Entity 클래스를 정의하십시오.

  • import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name = "users")
    public class User {
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private long id;
    
        @Column(name = "first_name")
        private String firstName;
    
        @Column(name = "last_name")
        private String lastName;
    
        @Column(name = "email")
        private String email;
    
        public User() {
    
        }
    
        public User(String firstName, String lastName, String email) {
            super();
            this.firstName = firstName;
            this.lastName = lastName;
            this.email = email;
        }
    
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
        public String getFirstName() {
            return firstName;
        }
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
        public String getLastName() {
            return lastName;
        }
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
    }
    


  • 데이터베이스에서 CRUD 작업을 수행하기 위해 저장소 인터페이스를 작성하십시오.

  • import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    
    
    @Repository
    public interface UserRepository extends JpaRepository<User, Long>{
    
    }
    


  • 사용자 지정 예외 클래스를 작성하는 동안 while은 리소스를 찾을 수 없을 때 throw됩니다.

  • import org.springframework.http.HttpStatus;
    import org.springframework.web.bind.annotation.ResponseStatus;
    
    @ResponseStatus(value = HttpStatus.NOT_FOUND)
    public class ResourceNotFoundException extends RuntimeException {
    
        private static final long serialVersionUID = 1L;
    
        public ResourceNotFoundException(String message) {
            super(message);
        }
    }
    


  • 컨트롤러 클래스는 다음과 같아야 합니다.

  • import java.util.List;
    
    import com.pradz.rest.entity.User;
    import com.pradz.rest.exception.ResourceNotFoundException;
    import com.pradz.rest.repository.UserRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.DeleteMapping;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.PutMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    
    @RestController
    @RequestMapping("/api/users")
    public class UserController {
    
        @Autowired
        private UserRepository userRepository;
    
        // get all users
        @GetMapping
        public List <User> getAllUsers() {
            return this.userRepository.findAll();
        }
    
        // get user by id
        @GetMapping("/{id}")
        public User getUserById(@PathVariable(value = "id") long userId) {
            return this.userRepository.findById(userId)
                    .orElseThrow(() -> new ResourceNotFoundException("User not found with id :" + userId));
        }
    
        // create user
        @PostMapping
        public User createUser(@RequestBody User user) {
            return this.userRepository.save(user);
        }
    
        // update user
        @PutMapping("/{id}")
        public User updateUser(@RequestBody User user, @PathVariable("id") long userId) {
            User existingUser = this.userRepository.findById(userId)
                    .orElseThrow(() -> new ResourceNotFoundException("User not found with id :" + userId));
            existingUser.setFirstName(user.getFirstName());
            existingUser.setLastName(user.getLastName());
            existingUser.setEmail(user.getEmail());
            return this.userRepository.save(existingUser);
        }
    
        // delete user by id
        @DeleteMapping("/{id}")
        public ResponseEntity <User> deleteUser(@PathVariable("id") long userId) {
            User existingUser = this.userRepository.findById(userId)
                    .orElseThrow(() -> new ResourceNotFoundException("User not found with id :" + userId));
            this.userRepository.delete(existingUser);
            return ResponseEntity.ok().build();
        }
    }
    


  • 전체 코드베이스는 아래 위치에서 사용할 수 있습니다 -

  • [ https://github.com/pradz13/SpringBootCrudRest.git ]

    다른 관계형 데이터베이스를 사용하려면 적절한 데이터베이스 드라이버 종속성을 사용하고 그에 따라 application.properties 파일을 업데이트하십시오.

    좋은 웹페이지 즐겨찾기