REST API + JPA 활용해서 H2 연결

Rae-eun Yang·2024년 7월 9일
0

JpaRepository 상속

  1. UserRepository를 만들어서 JpaRepository에 상속받도록 한다.
public interface UserRepository extends JpaRepository<(엔티티클래스이름), (아이디 데이터타입 ex. Integer)> {
}
  1. UserJpaResource 만들기! (REST API Controller 역할!)
package com.in28minutes.rest.webservices.restful_web_services.user;

import com.in28minutes.rest.webservices.restful_web_services.jpa.UserRepository;
import com.in28minutes.rest.webservices.restful_web_services.user.User;
import com.in28minutes.rest.webservices.restful_web_services.user.UserDaoService;
import com.in28minutes.rest.webservices.restful_web_services.user.UserNotFoundException;
import jakarta.validation.Valid;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;

import java.net.URI;
import java.util.List;
import java.util.Optional;

import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;

@RestController
public class UserJpaResource {
    private UserRepository repository;

    public UserJpaResource(UserRepository repository) {
        this.repository = repository;
    }
    // GET /users
    @GetMapping("/jpa/users")
    public List<User> retrieveAllUsers() {
        return repository.findAll();
    }

    // GET /users/{id}
    @GetMapping("/jpa/users/{id}")
    public User retrieveUsers(@PathVariable int id) {
//        레포지토리에는 Optional<>을 반환하는 findById만 있다!
//        User user = service.findOne(id);
        Optional<User> user = repository.findById(id);

//        if(user == null)
//            throw new UserNotFoundException("id : " + id);
          if(user.isEmpty())
              throw new UserNotFoundException("id : " + id);

//        EntityModel<User> entityModel = EntityModel.of(user);
        // Optional 객체에서 엔티티를 가져오기 위해 get()을 사용
        EntityModel<User> entityModel = EntityModel.of(user.get());

        WebMvcLinkBuilder link = linkTo(methodOn(this.getClass()).retrieveAllUsers());
        entityModel.add(link.withRel("all-users"));

        return entityModel.getContent();
    }

    @PostMapping("/jpa/users")
    public ResponseEntity<Object> createUser(@Valid @RequestBody User user) {
        User savedUser = repository.save(user);
        URI location = ServletUriComponentsBuilder.fromCurrentRequest()
                        .path("/{id}")
                        .buildAndExpand(savedUser.getId())
                        .toUri();
        return ResponseEntity.created(location).build();
    }

    @DeleteMapping("/jpa/users/{id}")
    public void deleteUser(@PathVariable int id) {
        repository.deleteById(id);
    }
}
profile
ContentsDev Manager

0개의 댓글