MyBatis VS JPA

ksngh·2024년 7월 4일

프로젝트

목록 보기
1/5

MyBatis와 JPA의 주요한 차이점은 DB와의 상호작용 방식이다.
MyBatis는 데이터베이스와 상호작용할 때 개발자가 SQL 쿼리를 직접 작성해 사용하며, 데이터 매핑을 위해 XML 또는 어노테이션을 사용한다.

반면 JPA는 객체와 관계형 데이터베이스 간의 매핑을 제공하며, JPQL(Java Persistence Query Language)을 사용하여 데이터베이스와 상호작용한다.

JPA의 장점

  1. 코드를 줄일 수 있다. - 더 간단하고 간결한 API를 제공한다.

  2. 개발자 생산성을 향상하고 오류를 줄일 수 있다.

  3. 타입 안정성이 더 좋고 지연로딩을 통해 애플리케이션 성능을 개선할 수 있다.

  4. 다양한 데이터베이스와 함께 사용하거나 다른 JPA 구현체로 전환하는 것이 더 쉽다.

  5. JPA는 Java EE 명세이므로 서로 다른 애플리케이션 서버 및 환경에서도 호환성을 보장한다.

  6. 대규모 프로젝트나 유연성과 확장성이 필요한 프로젝트에서 더 나은 선택이 될 수 있다.

SQL 쿼리를 직접 작성하는 것을 선호하거나 데이터베이스 상호 작용에 대한 더 많은 제어를 원하는 개발자의 경우 MyBatis를 사용할 수 있지만, 그런 게 아니라면 JPA를 사용하여 개발을 간소화하고 애플리케이션 성능을 개선할 수 있습니다.

예제 코드

  1. id를 통해 단일 엔티티 조회

MyBatis

public interface UserMapper {
  @Select("SELECT * FROM users WHERE id = #{id}")
  User findById(int id);
}

JPA

public interface UserRepository extends JpaRepository<User, Integer> {
  Optional<User> findById(Integer id);
}
  1. 엔티티 컬렉션 조회

MyBatis

public interface UserMapper {
  @Select("SELECT * FROM users")
  List<User> findAll();
}

JPA

public interface UserRepository extends JpaRepository<User, Integer> {
  List<User> findAll();
}
  1. 엔티티 추가

MyBatis

public interface UserMapper {
  @Insert("INSERT INTO users (name, email) VALUES (#{name}, #{email})")
  @Options(useGeneratedKeys = true, keyProperty = "id")
  int insert(User user);
}

JPA

public interface UserRepository extends JpaRepository<User, Integer> {
  User save(User user);
}
  1. 엔티티 업데이트

MyBatis

public interface UserMapper {
  @Update("UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}")
  int update(User user);
}

JPA

public interface UserRepository extends JpaRepository<User, Integer> {
  User save(User user);
}
  1. id를 이용해서 엔티티 삭제

MyBatis

public interface UserMapper {
  @Delete("DELETE FROM users WHERE id = #{id}")
  int deleteById(int id);
}

JPA

public interface UserRepository extends JpaRepository<User, Integer> {
  void deleteById(Integer id);
}

정리

MyBatis와 JPA의 주요한 차이점은 DB와의 상호작용 방식이다.
MyBatis의 경우 개발자가 SQL 쿼리를 직접 작성해 사용하며, 데이터 매핑을 위해 XML 또는 어노테이션을 사용한다.
반면, JPA는 객체와 관계형 데이터베이스 간의 매핑을 제공하며 JPQL을 사용해서 데이터베이스와 상호작용한다.

SQL 쿼리를 직접 작성하는 것을 선호하거나 데이터베이스 상호 작용에 대한 더 많은 제어를 원하지 않는 이상 JPA를 사용하여 개발을 간소화하고 애플리케이션 성능을 개선할 수 있다.

MyBatis와 비교했을 때 JPA의 장점으로는 더 간단하고 간결한 API를 제공해서 개발자 생산성을 높일 수 있고 오류를 줄일 수 있다. 또한 다른 DB와 함께 사용하거나 다른 JPA 구현체로 전환하는 것도 쉬우며 다른 애플리케이션과 호환성이 좋고 유연성과 확장성이 필요한 프로젝트에 더 알맞다.

profile
백엔드 개발자입니다.

0개의 댓글