Tiny Star

IT

[JAVA] MyBatis VS JPA

흰둥아 2025. 4. 23. 12:07

MyBatis와 JPA는 둘 다 데이터베이스와 연동하는 매퍼 프레임워크이다.

 

 

MyBatis

SQL Mapper 프레임워크
개발자가 직접 SQL을 작성하고, 그 결과를 Java 객체와 매핑한다.

  • 특징
    1. 복잡한 쿼리 작성이 쉬움
    2. DB 성능 최적화에 유리
    3. 쿼리의 실행 순서와 내용을 명확히 알 수 있음

사용 예)

<mapper namespace="com.example.mapper.UserMapper">

    <select id="findById" parameterType="long" resultType="User">
        SELECT * FROM users WHERE id = #{id}
    </select>

    <insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO users(name, email) VALUES(#{name}, #{email})
    </insert>

    <update id="updateUser" parameterType="User">
        UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
    </update>

    <delete id="deleteUser" parameterType="long">
        DELETE FROM users WHERE id = #{id}
    </delete>

</mapper>

 

 

 


 

JPA(Java Persistence API)

 

Java 진영의 ORM(Object-Relational Mapping) 표준 인터페이스
Hibernate가 가장 널리 쓰이는 JPA 구현체
SQL을 직접 작성하지 않고, 객체를 통해 데이터를 조작

  • 특징
    1. Entity 클래스를 통해 DB 테이블과 1:1 매핑
    2. SQL 대신 JPQL이라는 객체지향 쿼리 사용
    3. CRUD 자동화: save, findById, delete 등 기본 메서드 제공
    4. 변경 감지(Dirty Checking), 지연 로딩, 캐시 등 고급 기능 제공

사용 예)

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String email;
    
    // getters, setters
}
User user = userRepository.findById(1L).orElseThrow();
user.setEmail("new@email.com");
userRepository.save(user);  // update
userRepository.deleteById(1L);  // delete

 

 


 

 

비교

항목 MyBatis JPA
개발방식 SQL 중심 (명시적) 객체 중심 (자동화)
제어권 개발자 프레임워크
복잡한 쿼리 유리함 다소 불편 (Native Query 필요)
러닝커브 낮음 높음 (ORM 개념 학습 필요)
성능 튜닝 직접 튜닝 용이 캐시/지연로딩 등으로 복잡할 수 있음
트랜잭션 관리 수동 (Spring이 도와줄 수 있음) Spring Data JPA에서 자동 처리 가능

 

 

언제쓰면 좋을까?

상황 추천
복잡하고 성능 중요한 SQL이 많다 MyBatis
빠르게 CRUD 구성하고 자동화 활용하고 싶다 JPA
큰 규모의 도메인 모델, 객체 중심 개발 지향 JPA
데이터 중심의 서비스, SQL 최적화 중요 MyBatis

'IT' 카테고리의 다른 글

[데이터] Kaggle (캐글)  (0) 2025.05.05
[Spring] @Transactional 트랜잭션 어노테이션  (0) 2025.04.28
Redis란?  (1) 2025.04.28
top