[java] MyBatis의 아키텍처

MyBatis는 자바 객체와 SQL 문 사이의 매핑을 담당하는 ORM(Object Relational Mapping) 프레임워크입니다. 이를 통해 개발자는 데이터베이스 쿼리와 연결 관리를 손쉽게 처리할 수 있습니다. MyBatis의 아키텍처는 크게 세 가지 주요 구성 요소로 구성됩니다.

1. SqlMapConfig.xml

SqlMapConfig.xml은 MyBatis의 설정 파일입니다. 이 파일에는 데이터베이스 연결 정보 및 MyBatis의 기본 설정이 포함되어 있습니다. SqlMapConfig.xml 파일은 MyBatis의 시작 점으로 사용되며, MyBatis의 여러 기능을 구성할 수 있습니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis_example"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/example/mapper/ExampleMapper.xml"/>
    </mappers>
</configuration>

2. Mapper 인터페이스

Mapper 인터페이스는 MyBatis와 데이터베이스 사이의 매핑 정보를 정의하는 역할을 합니다. 이 인터페이스는 MyBatis의 SQL 문을 호출하기 위한 메서드를 포함하고 있습니다. Mapper 인터페이스에는 SQL 문장에 대한 매개 변수 및 결과 매핑을 정의할 수 있는 애노테이션 또는 XML을 사용할 수 있습니다.

public interface ExampleMapper {
    @Select("SELECT * FROM example_table WHERE id = #{id}")
    ExampleEntity findById(int id);
    
    @Insert("INSERT INTO example_table (id, name) VALUES (#{id}, #{name})")
    void insertExample(ExampleEntity example);
    
    @Update("UPDATE example_table SET name = #{name} WHERE id = #{id}")
    void updateName(ExampleEntity example);
    
    @Delete("DELETE FROM example_table WHERE id = #{id}")
    void deleteById(int id);
}

3. SQL 매퍼(XML)

SQL 매퍼는 실제 SQL 쿼리를 포함하는 XML 파일입니다. SQL 매퍼는 Mapper 인터페이스에서 사용된 SQL 쿼리를 구현하는 역할을 합니다. SQL 매퍼에서는 파라미터를 전달받을 수 있고, 결과를 매핑하여 반환할 수 있습니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.mapper.ExampleMapper">
    <select id="findById" resultType="com.example.entity.ExampleEntity">
        SELECT * FROM example_table WHERE id = #{id}
    </select>

    <insert id="insertExample">
        INSERT INTO example_table (id, name) VALUES (#{id}, #{name})
    </insert>

    <update id="updateName">
        UPDATE example_table SET name = #{name} WHERE id = #{id}
    </update>

    <delete id="deleteById">
        DELETE FROM example_table WHERE id = #{id}
    </delete>
</mapper>

MyBatis의 아키텍처는 이러한 구성 요소를 조화롭게 조합하여 자바 객체와 SQL 문 사이의 매핑을 수행합니다. 이를 통해 데이터베이스 작업에 대한 복잡성을 낮추고 개발자는 보다 깔끔하고 유지보수 가능한 코드를 작성할 수 있습니다.

참고자료: