본문 바로가기
IT개발/Mybatis, JPA

Mybatis & JPA 비교

by 시간기억자 2025. 1. 17.
반응형

MyBatis와 JPA는 Java에서 데이터베이스와 상호작용하기 위한 두 가지 주요 방법입니다.

1. MyBatis

 

MyBatis는 SQL 쿼리를 직접 작성하고 이를 매핑하여 객체와 데이터베이스 간의 변환을 처리하는 프레임워크입니다. SQL을 직접 작성할 수 있어 복잡한 쿼리를 쉽게 사용할 수 있지만, 쿼리와 매핑을 수동으로 관리해야 합니다.

 

특징

  • SQL 쿼리를 직접 작성할 수 있음.
  • XML 파일이나 어노테이션을 사용하여 매핑 설정.
  • 복잡한 쿼리를 쉽게 작성 가능.
  • SQL의 유연성을 제공하지만, 코드량이 많아질 수 있음.

코드 예시

1. MyBatis 설정 (XML)

mybatis-config.xml

xml

<configuration>

    <environments default="development">

        <environment id="development">

            <transactionManager type="JDBC"/>

            <dataSource type="POOLED">

                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>

                <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>

                <property name="username" value="root"/>

                <property name="password" value="password"/>

            </dataSource>

        </environment>

    </environments>

    <mappers>

        <mapper resource="mappers/UserMapper.xml"/>

    </mappers>

</configuration>

 

2. 매퍼 XML 파일

UserMapper.xml

xml

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

    <select id="getUserById" parameterType="int" resultType="com.example.model.User">

        SELECT * FROM users WHERE id = #{id}

    </select>

</mapper>

 

3. DAO 인터페이스

java

public interface UserMapper {

    User getUserById(int id);

}

 

4. service 클래스

java

@Service

public class UserService {

    private final UserMapper userMapper;



    public UserService(UserMapper userMapper) {

        this.userMapper = userMapper;

    }



    public User findUserById(int id) {

        return userMapper.getUserById(id);

    }

}

 

 

2. JPA (Java Persistence API)

JPA는 Java에서 ORM(Object-Relational Mapping)을 구현하는 표준 API입니다. JPA를 사용하면 객체와 데이터베이스 간의 매핑이 자동으로 이루어져 SQL 쿼리를 직접 작성할 필요가 없습니다.

 

특징

  • SQL 쿼리 없이 객체 지향적으로 데이터베이스에 접근 가능.
  • 엔티티 클래스와 리포지토리를 통해 데이터 관리.
  • JPQL(Java Persistence Query Language)을 사용할 수 있음.
  • 코드량이 줄어들고 유지보수가 용이.

코드 예시

1. 엔티티 클래스

java

@Entity

@Table(name = "users")

public class User {

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private int id;



    private String name;



    // Getters and Setters

}

2. 리포지토리 인터페이스

java

public interface UserRepository extends JpaRepository<User, Integer> {

    User findById(int id);

}

 

3. service 클래스

java

@Service

public class UserService {

    private final UserRepository userRepository;



    public UserService(UserRepository userRepository) {

        this.userRepository = userRepository;

    }



    public User findUserById(int id) {

        return userRepository.findById(id).orElse(null);

    }

}

3. MyBatis vs JPA 비교

특징 MyBatis JPA
쿼리 작성 SQL을 직접 작성 SQL을 자동 생성 (JPQL 사용 가능)
매핑 방식 XML 또는 어노테이션 기반 매핑 객체와 데이터베이스 간의 자동 매핑
복잡성 복잡한 쿼리를 쉽게 작성할 수 있음 객체 지향적 접근, 코드 간결성
성능 SQL 최적화 가능 ORM으로 인해 성능 저하 가능성 있음
학습 곡선 SQL에 익숙한 개발자에게 쉬움 ORM 개념 이해가 필요, 초기 학습 필요

 

결론

MyBatis는 SQL 쿼리를 직접 제어하고 복잡한 쿼리를 작성할 수 있는 유연성을 제공합니다. 하지만 매핑 관리가 수동으로 이루어져 코드가 길어질 수 있습니다.

JPA는 객체 지향적으로 데이터베이스를 다룰 수 있으며, 코드가 더 간결해지고 유지보수가 쉬워집니다. 다만 ORM에 대한 이해가 필요합니다.

 

반응형

'IT개발 > Mybatis, JPA' 카테고리의 다른 글

JPA & Hibernate 개념  (0) 2025.01.17
Mybatis란(백엔드개발/자바/서버/데이터/Java/backend)  (0) 2024.11.22

댓글