DB

Mybatis

NellKiM 2024. 12. 2. 09:52

MyBatis는 Java 기반의 SQL 매퍼 프레임워크로, 기존의 JDBC를 단순화하고, 개발자가 SQL을 작성하면서도 객체와 관계형 데이터베이스를 쉽게 연결할 수 있도록 돕는 도구입니다. 객체 지향 프로그래밍과 SQL을 통합한 프레임워크로, 복잡한 ORM(Object Relational Mapping)보다 SQL 작성의 자유도를 높여줌

MyBatis의 주요 특징

  1. SQL 중심의 개발
    • MyBatis는 개발자가 직접 SQL을 작성.
    • ORM 프레임워크(예: Hibernate)와 달리, 자동 생성된 SQL이 아닌 개발자가 작성한 SQL을 그대로 사용
    • SQL과 Java 코드의 명확한 분리를 제공
  2. Mapper XML 또는 어노테이션 지원
    • SQL은 XML 파일로 작성하거나, Java 코드에 어노테이션으로 작성가능
    • XML 파일을 통해 SQL을 정의하면 유지보수가 용이해지고, 코드와 SQL의 관심사가 분리
  3. 객체와 SQL 결과 매핑
    • MyBatis는 데이터베이스에서 조회한 결과를 Java 객체로 변환하는 매핑 작업을 자동으로 수행
    • 매핑은 XML 또는 어노테이션을 사용해 설정
  4. 동적 SQL 지원
    • XML 파일에서 <if>, <choose>, <foreach> 같은 태그를 사용하여 조건에 따라 SQL 문을 동적으로 생성가능
  5. 트랜잭션 관리
    • MyBatis는 JDBC 기반이기 때문에 기존의 JDBC 트랜잭션 관리 방식을 그대로 사용할 수 있습니다.
    • Spring과 통합하면 Spring의 트랜잭션 관리 기능도 활용할 수 있습니다.

MyBatis의 주요 구성 요소

  1. SqlSessionFactory
    • MyBatis의 주요 진입점으로, SQL 실행에 필요한 SqlSession 객체를 생성
  2. SqlSession
    • 데이터베이스 작업(삽입, 조회, 수정, 삭제)을 수행하는 핵심 인터페이스
    • SQL 문을 실행하고 결과를 반환받을 때 사용
  3. Mapper
    • SQL 쿼리를 실행하기 위한 매핑 인터페이스입니다.
    • XML 파일 또는 어노테이션을 통해 SQL 쿼리와 메서드를 매핑

MyBatis의 동작 흐름

  1. XML Mapper 설정
    • 데이터베이스 연결 및 SQL 매핑 정보를 XML 파일에 작성
  2. SqlSessionFactory 생성
    • SqlSessionFactory를 사용하여 SQL 세션을 생성
  3. SQL 실행
    • SqlSession 객체를 사용하여 SQL을 실행하고 결과를 반환받습니다.
  4. 결과 매핑
    • SQL 실행 결과는 Java 객체로 매핑됩니다.
<mapper namespace="com.example.mapper.UserMapper">
  <select id="selectUser" parameterType="int" resultType="com.example.domain.User">
    SELECT * FROM users WHERE id = #{id}
  </select>
</mapper>
try (SqlSession session = sqlSessionFactory.openSession()) {
    UserMapper mapper = session.getMapper(UserMapper.class);
    User user = mapper.selectUser(1);
    System.out.println(user);
}
public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    User selectUser(int id);
}

MyBatis의 장단점

장점

  • SQL 작성의 자유도
  • 간단한 설정 및 사용
  • 객체와 SQL 매핑의 유연성
  • 기존 JDBC 코드보다 간결함

단점

  • SQL을 직접 작성해야 하므로 복잡한 쿼리는 관리가 어려울 수 있음.
  • ORM 프레임워크에 비해 객체 중심 개발이 약함.
  • 캐싱, 데이터베이스 변경 등에 대한 지원이 ORM보다 부족함.

MyBatis는 SQL 중심 개발에 적합하며, JDBC 코드의 복잡함을 줄이고 싶을 때 유용합니다. ORM 프레임워크보다 SQL 최적화가 중요하거나 데이터베이스 종속적인 프로젝트에 적합합니다.