MyBatis 활용 가이드

1. MyBatis 개요 및 기본 구성 요소

MyBatis는 JDBC를 간소화하고 SQL 쿼리와 자바 객체 간의 매핑을 용이하게 해주는 프레임워크입니다. 다음은 MyBatis를 사용하는 간단한 예제입니다.

1.1 JDBC 대신 MyBatis 사용하기

다음은 JDBC를 직접 사용하는 코드의 예시입니다:


Connection conn = DriverManager.getConnection(url, username, password);
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE id = ?");
stmt.setInt(1, userId);
ResultSet rs = stmt.executeQuery();

위 코드를 MyBatis로 변환하면 다음과 같습니다:


SqlSession session = sqlSessionFactory.openSession();
User user = session.selectOne("getUserById", userId);
session.close();

1.2 MyBatis 주요 구성 요소

  • XML 설정 파일: MyBatis 전반적인 설정을 정의합니다.
  • SqlSessionFactory: SqlSession 인스턴스를 생성합니다.
  • SqlSession: 데이터베이스와 상호작용하는 핵심 인터페이스입니다.
  • Mapper: SQL 문장을 정의하고 실행하는 인터페이스 또는 XML 파일입니다.

2. Mapper XML 파일 작성법

2.1 간단한 조회 예제

다음은 사용자를 조회하는 간단한 Mapper XML 예제입니다:


<select id="selectUser" resultType="User">
    SELECT id, username, email FROM users WHERE id = #{id}
</select>

2.2 삽입 및 업데이트

자동 생성된 키 값을 받기 위해 useGeneratedKeys 속성을 사용할 수 있습니다:


<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO users (username, email) VALUES (#{username}, #{email})
</insert>

3. 동적 SQL

조건에 따라 SQL 구문을 동적으로 조정할 수 있습니다. 예를 들어:


<select id="findUsers" resultType="User">
    SELECT * FROM users
    <where>
        <if test="name != null">AND name LIKE '%${name}%'</if>
        <if test="age != null">AND age = #{age}</if>
    </where>
</select>

4. 고급 기능

4.1 결과 맵핑 resultMap

복잡한 객체 관계를 처리하기 위한 resultMap 예제입니다:


<resultMap id="userResultMap" type="User">
    <id property="id" column="user_id"/>
    <result property="username" column="username"/>
    <association property="profile" javaType="Profile">
        <id property="id" column="profile_id"/>
        <result property="bio" column="bio"/>
    </association>
</resultMap>

4.2 캐싱

MyBatis에서는 쿼리 결과를 캐싱하여 성능을 최적화할 수 있습니다:


<cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>

5. MyBatis Generator

MyBatis Generator(MBG)는 데이터베이스 스키마로부터 자동으로 Mapper와 Entity 클래스를 생성하는 도구입니다. 다음은 MBG 설정 파일의 예제입니다:


<generatorConfiguration>
    <context id="default" targetRuntime="MyBatis3">
        <jdbcConnection connectionURL="jdbc:mysql://localhost:3306/test" 
                       driverClass="com.mysql.cj.jdbc.Driver" 
                       userId="root" 
                       password="password"/>
        <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>
        <table tableName="users"/>
    </context>
</generatorConfiguration>

6. 로깅 설정

로그를 통해 쿼리 실행 여부와 캐싱 상태를 확인할 수 있습니다:


log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.logger.org.mybatis=DEBUG

태그: MyBatis sql-mapping dynamic-sql

5월 23일 23:27에 게시됨