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 문 사이의 매핑을 수행합니다. 이를 통해 데이터베이스 작업에 대한 복잡성을 낮추고 개발자는 보다 깔끔하고 유지보수 가능한 코드를 작성할 수 있습니다.
참고자료: