[java] JPA의 영속성 컨텍스트와 MyBatis의 일대다 매핑 비교

JPA(Java Persistence API)와 MyBatis는 두 가지 다른 ORM(Object-Relational Mapping) 기술입니다. JPA는 영속성 컨텍스트(Persistence Context)를 사용하고, MyBatis는 XML이나 어노테이션을 통해 매핑을 수행합니다. 이 글에서는 JPA의 영속성 컨텍스트와 MyBatis의 일대다 매핑을 비교해보겠습니다.

JPA의 영속성 컨텍스트

JPA에서 영속성 컨텍스트는 엔티티(Entity)와 관련된 변경 사항을 추적하고 관리하는데 사용됩니다. 영속성 컨텍스트는 트랜잭션 범위 내에서 엔티티를 관리하며, 엔티티를 데이터베이스에 저장하거나 업데이트할 때 적절한 SQL을 생성하여 데이터베이스에 반영합니다. 또한 동일한 엔티티를 여러 번 조회하더라도 영속성 컨텍스트는 하나의 인스턴스만을 유지합니다.

아래는 JPA에서의 일대다 매핑 코드 예제입니다.

@Entity
public class Parent {
    @Id
    private Long id;
    @OneToMany(mappedBy="parent", cascade=CascadeType.ALL)
    private List<Child> children;
    //...
}

MyBatis의 일대다 매핑

MyBatis는 XML이나 어노테이션을 사용하여 데이터베이스와 자바 객체를 매핑합니다. 일대다 매핑의 경우 MyBatis는 SQL 매퍼 파일에 해당 매핑을 정의하고 결과를 매핑하기 위한 resultMap을 설정합니다. MyBatis는 SQL을 직접 작성하므로 유연한 쿼리 작성이 가능합니다.

아래는 MyBatis에서의 일대다 매핑 XML 코드 예제입니다.

<resultMap id="parentMap" type="Parent">
    <id property="id" column="parent_id"/>
    <collection property="children" ofType="Child" column="parent_id" select="selectChildrenByParentId"/>
</resultMap>

결론

JPA의 영속성 컨텍스트는 객체 관리와 데이터베이스 매핑을 편리하게 제공하는 반면, MyBatis는 직접 SQL을 작성하고 매핑하기 때문에 유연성이 높다는 장점이 있습니다. 개발자는 프로젝트의 특성과 요구 사항에 맞게 두 ORM 기술을 적절히 선택하여 사용해야 합니다.