주뇽's 저장소

[Java Spring] JDBC, Spring JDBC, JPA, Spring JPA 본문

웹개발/SpringBoot

[Java Spring] JDBC, Spring JDBC, JPA, Spring JPA

뎁쭌 2023. 11. 24. 17:48
728x90
반응형

JDBC와 Spring JDBC를 이용한 코드 비교

- JDBC(Delete)

public void deleteTodo(int id){
	PrepareStatement st = null;
	try{
	st = db.conn.prepareStatement("delete from todo where id=?");
	st.setInt(1, id);
	st.execute();
	} catch (SQLException e){
			logger.fatal("Query Failed :, e");
	} finaaly {
	if (st != null){
		try{st.close();}
		catch (SQLException e){}
		}
	}
}

 

- Spring JDBC(Delete)

public void deleteTodo(int id){
	jdbcTemplete.update("delete from todo where id=?", id);
}

동일하게 쿼리문은 작성하지만 jdbc템플릿을 이용한 Spring JDBC의 코드가 훨씬 간결하다. 하지만 JDBC를 이용하는 경우 여전히 쿼리문을 작성해야 한다는 부담감은 존재한다. 쿼리를 작성해야한다는 문제점을 해결하기 위해서 나온것이 JPA이다

 

JPA와 Spring JPA를 이용한 코드 비교

JPA(Insert, Find, Delete)

public void insert(Course course){
    entityManager.merge(course);
}
public Course findById(long id){
    return entityManager.find(Course.class, id);
}
public void deleteById(long id){
    Course course = entityManager.find(Course.class, id);
    entityManager.remove(course);
}

 

JPA부터는 아예 다른 방식(ORM)을 이용해서 더 이상 SQL 쿼리문에 신경을 쓰지 않아도 된다 뿐만 아니라 코드 또한 매우 간결하다.

- 테이블 <=> Entity 매핑  

 

이미 JPA만 봐도 충분히 편한것 같은데 Spring JPA는 왜 쓰는걸까?

 

Spring JPA

public interface CourseSpringJpaRepository extends JpaRepository<Course, Long> {

}

!!! Spring JPA는 JpaRepository를 상속받고 인터페이스로 선언만 해주면 된다!! 

JPA에서 사용하는 entityManager를 전혀 사용하지 않아도 된다. 뿐만 아니라 그 어떠한 메서드를 구현하지 않고 이미 정의되어 있는 메서드를 사용만 하면된다.

만약 insert를 하고 싶다면 아래처럼 그냥 이미 구현되어 있는 .save를 사용하면 된다. 이 메서드 이외에도 엄청 다양한 메서드가 존재한다.

private CourseSpringJpaRepository repository;
repository.save(new Course(1, "Learn JAVA !!", "PARK"));

#-- 현재 Course 엔티티는 ID, nane, author 필드를 가지고 있음

 


Spring JPA를 사용함에 있어 개발자는 쿼리문에 신경 쓰지 않고 개발을 진행할 수 있다. !!!  뿐만 아니라 다양한 커스텀도 가능하다 ㄷㄷ;;

 

결론 데이터베이스를 이용함에 있어서 패러다임은

- 쿼리문을 사용하는 JDBC => JDBC를 더 간결하게 사용할 수 있게 도와주는Spring JDBC로 변경되었고 

- 현재는 쿼리문조차 사용하지 않는 JPA(ORM) => JPA에 Entitymanager나 메서드 구현을 하지 않아도 되는 Spring JPA로 변했다고 보면 될것 같다! 

 

결론 : Spring JPA를 쓰자...