[MyBatis] Enum 타입 사용하기

참고 문서

테스트 환경

  • mybatis 3.3.1
  • mybatis-spring 1.2.4

분기 조건으로 사용할 때

enum 타입의 파라미터를 if문의 변수로 사용한다고 하자. 가령 검색 조건으로 사용될 클래스가 다음처럼 enum 타입을 포함하고 있을 때:

enum SystemDivision {
    BACK_OFFICE, FRONT_OFFICE
}

public class SearchCondition {
    private SystemDivision sysDiv;

    // getter, setter
}

mapper에서 Enum.name() 혹은 Enum.toString()을 직접 호출하도록 작성하면, enum 타입의 값을 문자열과 비교하는 조건으로 사용할 수 있다:

<select id="getSomething" parameterType="SearchCondition">
    SELECT 'something' FROM my_test_table
    <if test="sysDiv.name() == 'FRONT_OFFICE'" >
        WHERE 1 = 1
    </if>
    <if test="sysDiv.toString() == 'BACK_OFFICE'">
        WHERE 2 = 2
    </if>
</select>

Enum.name()이나 Enum.toString() 모두 enum 타입의 이름을 돌려주니 두 메서드의 결과는 같다. 아래는 Java에 있는 Enum 클래스의 소스다:

public abstract class Enum<E extends Enum<E>>
        implements Comparable<E>, Serializable {

    private final String name;

    public final String name() {
        return name;
    }

    public String toString() {
        return name;
    }

    // 생략
}

파라미터 표현식에서 사용할 때

마이바티스는 파라미터의 이름 앞에 getter를 붙여 찾으려하기 때문에, 다음처럼 임의의 getter를 만드는 방식을 쓴다.

enum SystemDivision {
    BACK_OFFICE, FRONT_OFFICE

    public String getValue() {
        return super.toString();
    }
}

public class SearchCondition {
    private SystemDivision sysDiv;

    // getter, setter
}
<if test="sysDiv != null">
    #{sysDiv.value}
</if>