Spring JPA를 활용해보긴 했는데 정확히 뭔지, 내가 어떻게 쓴건지 잘 몰라서 정리를 한번 해봄
어노테이션을 활용해서 스프링 내에서 정의할 수 있다.
이러한 형태를 따라 Jpa를 사용할 수 있다
JPA의 핵심은 Entity와 Repository이다
Entity는 자바 객체를 DB가 이해할 수 있게 만든 것이다
Repository는 이 Entity를 DB에 저장하는 역할이다
@Service
@Slf4j
@RequiredArgsConstructor
public class UserService {
private final UserRepository repository;
private final PasswordEncoder encoder;
//회원가입하기
@Transactional
public UserEntity create(UserEntity userEntity){
if(userEntity == null){
log.info("userEntity create is error!");
throw new RuntimeException("UserEntity(Service) create Error");
}
String rawPw = userEntity.getPassword();
userEntity.setPassword(encoder.encode(rawPw));
return repository.save(userEntity);
}
서비스 클래스의 메소드에서 db에 저장하기 위해 repository.save를 호출한다. 스프링 JPA를 사용하지 않는다면 SQL 쿼리문을 직접 작성해서 저장해야 할 텐데 이미 선언되어있는 save를 호출해서 그냥 저장하는 것이다.
public interface RoutineRepository extends JpaRepository<RoutineEntity,Long> {
//user_id가 userId인 루틴을 찾아서 리스트로 반환
@Query(value = "SELECT * FROM routine WHERE user_id = :userId", nativeQuery = true)
List<RoutineEntity> findByUserId(Long userId);
}
정의되지 않은 메소드는 이렇게 리포지토리에서 쿼리문을 작성하고 메소드로 만들어서 사용할 수 있다.