Springboot

JPA 에 대한 설명 및 예제

수아파파's 2023. 9. 18. 15:19
반응형

JPA(Java Persistence API)는 자바 객체와 관계형 데이터베이스를 매핑해주는 ORM(Object-Relational Mapping) 프레임워크로, 개발자가 SQL 쿼리를 작성하지 않고도 객체 지향적인 방식으로 데이터베이스를 조작할 수 있게 도와줍니다.

JPA를 사용하면 클래스와 테이블, 객체와 레코드 간의 매핑을 어노테이션을 통해 설정할 수 있으며, CRUD(Create, Read, Update, Delete) 연산을 메서드 호출만으로 처리할 수 있습니다.

아래는 JPA를 사용하여 간단한 예제를 작성한 코드입니다.

- Entity 클래스
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private int age;

    // getters, setters, constructors
}
- Repository 인터페이스
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
    // 추가적인 메서드를 정의할 수 있음
}
- 서비스 클래스
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    public User createUser(User user) {
        return userRepository.save(user);
    }

    public User updateUser(User user) {
        return userRepository.save(user);
    }

    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}
- 컨트롤러 클래스
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {
    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping("")
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    @PostMapping("")
    public User createUser(@RequestBody User user) {
        return userService.createUser(user);
    }

    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        user.setId(id);
        return userService.updateUser(user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
    }
}

이 예제에서는 User 클래스를 JPA의 @Entity 어노테이션을 통해 엔티티로 지정하였고, UserRepository를 통해 CRUD 연산을 수행합니다. UserService 클래스에서는 이러한 연산을 호출하는 메서드를 정의하였고, UserController 클래스에서는 RESTful API 엔드포인트를 제공하고 해당 메서드를 호출합니다.

반응형