빡코

[JPA] 스프링데이터 JPA 본문

Java/JPA

[JPA] 스프링데이터 JPA

chris.djang 2023. 12. 27. 17:15

Spring Data JPA ? 복잡한 JPA 코드를 스프링과 함께 쉽게 사용할 수 있도록 도와주는 라이브러리 

 

Spring Data JPA > JPA(ORM) > Hibernate(JPA 구현체) > JDBC 를 사용한다.

 

JpaRepository를 상속 받은 UserRepository 

public interface UserRepository extends JpaRepository<User, Long> {

    Optional<User> findByName(String name); //find: 1건을 가져옴, 반환타입 ? 객체 or null 반환

    Boolean existsByName(String name); //쿼리 결과가 존재하는지 확인, 반환타입 boolean

    long countByAge(Integer age); //SQL의 결과 개수를 센다. 반환타입? long

    List<User> findAllByNameAndAge(String name, int age);
    // == SELECT * FROM user WHERE name = ? AND age = ?;

    //GreaterThan : 초과
    //GreaterThanEqual: 이상
    //LessThan: 미만
    //LessThanEqual: 이하
    //Between: 사이
    //StartsWith: ~로 시작하는
    //EndsWith: ~로 끝나는

}

 

UserRepository 인터페이스를 주입 받은 UseService 클래스 

@Service
public class UserServiceV2 {
    private final UserRepository userRepository;

    public UserServiceV2(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public void saveUser(UserCreatRequest request) {
      userRepository.save(new User(request.getName(), request.getAge()));
        //save는 user의 id를 반환한다.
    }

    public List<UserResponse> getUsers() {
        return  userRepository.findAll().stream() //findAll: 모든 데이터를 가져온다.
            .map(UserResponse::new)//user -> UserResponse를 변환
            .collect(Collectors.toList());
    }

    public void updateUser(UserUpdateRequest request) {
        //select * from User where id = ? 쿼리 실행
        //Optional<User> 결과 반환
        User user = userRepository.findById(request.getId())
                .orElseThrow(IllegalArgumentException::new);//존재하지 않는다면 바로 에러 던진다.
        user.updateName(request.getName()); //변경되어야 할 이름
        userRepository.save(user);
    }

    //삭제
	public void deleteUser(String name) {
        User user = userRepository.findByName(name).orElseThrow(IllegalArgumentException::new);
        userRepository.delete(user);
    }
}