일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- stream
- DDL
- redis
- lambda
- DI
- select_type
- 조합
- 생성자 주입
- cache
- Test
- 바이너리 카운팅
- VUE
- jpa
- KEVISS
- MSA
- 필드 주입
- equals
- java
- StringBuilder
- 재정의
- Spring
- AOP
- SQL
- docker
- 테스트 코드
- static
- jwt
- 열 속성
- hashcode
- 인덱스
- Today
- Total
백엔드 개발자 블로그
JPA와 Mybatis 차이 본문
😅 JPA가 좋은 더 좋은 것 같은데..
국비 지원 교육을 통해 Mybatis를 학습하고, 독학을 통해 JPA를 학습했습니다. 직접 SQL문을 작성안해줘도 되고, 매핑을 위해서 XML, annotation으로 따로 설정할 필요가 없어서 JPA가 훨씬 사용하기 편한 것 같은데 현업에서는 Mybatis가 사용되고 있는 경우가 있습니다. 해당 궁금증을 해결하기 위해 해당글을 작성해봅니다.
전 세계적 트렌트를 살펴보자
구글 트렌드를 통해 살펴봤을때, 지난 5년 동안 JPA의 압승인 것을 알 수 있습니다.
그럼 나라별은 어떨까요?
중국, 대한민국, 일본을 제외하면 이번에도 JPA가 압도적인 것을 알 수 있습니다.
차이점
DB와의 상호작용 방식
MyBatis는 데이터베이스와 상호작용할 때 개발자가 SQL 쿼리를 직접 작성해 사용하며, 데이터 매핑을 위해 XML 또는 어노테이션을 사용합니다.
반면 JPA는 객체와 관계형 데이터베이스 간의 매핑을 제공하며, JPQL(Java Persistence Query Language)을 사용하여 데이터베이스와 상호작용합니다.
JPA의 장점은?
1. 코드를 줄일 수 있습니다. - 더 간단하고 간결한 API를 제공합니다.
2. 개발자 생산성을 향상하고 오류를 줄일 수 있습니다.
3. 타입 안정성이 더 좋고 지연로딩을 통해 애플리케이션 성능을 개선할 수 있습니다.
4. 다양한 데이터베이스와 함께 사용하거나 다른 JPA 구현체로 전환하는 것이 더 쉽습니다.
5. JPA는 Java EE 명세이므로 서로 다른 애플리케이션 서버 및 환경에서도 호환성을 보장합니다.
6. 대규모 프로젝트나 유연성과 확장성이 필요한 프로젝트에서 더 나은 선택이 될 수 있습니다.
Mybatis 장점은?
1. SQL 쿼리를 직접 작성하여 처리할 수 있다.
2. 데이터베이스 상호 작용에 대한 더 많은 제어를 할 수 있다.
사용하는 이유
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);
}
2. 엔티티 컬렉션 조회
MyBatis
public interface UserMapper {
@Select("SELECT * FROM users")
List<User> findAll();
}
JPA
public interface UserRepository extends JpaRepository<User, Integer> {
List<User> findAll();
}
3. 엔티티 추가
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);
}
4. 엔티티 업데이트
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);
}
5. 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 구현체로 전환하는 것도 쉬우며 다른 애플리케이션과 호환성이 좋고 유연성과 확장성이 필요한 프로젝트에 더 알맞습니다.
'ORM' 카테고리의 다른 글
JPA vs Mybatis (0) | 2024.05.10 |
---|---|
JPA와 Spring Data JPA 차이 (1) | 2024.02.07 |
ORM (0) | 2023.08.18 |