[Mybatis] 동적 SQL을 위한 OGNL 표현식 예제

MyBatis에서 동적 SQL을 작성할 때 OGNL(오픈 소스 개체 그래프 네비게이션 언어) 표현식을 사용하여 Java 객체의 속성 및 메서드를 참조할 수 있습니다. 이를 통해 동적 SQL 쿼리를 더욱 유연하게 작성할 수 있습니다. 아래는 OGNL 표현식을 사용하는 동적 SQL 예제입니다.

예제: OGNL 표현식을 사용한 동적 SQL

  1. 매퍼 XML 파일 작성:
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
    <select id="getUsersByFilter" resultType="User">
        SELECT * FROM users
        WHERE
        <if test="username != null">
            username = #{username}
        </if>
        <if test="email != null">
            <!-- OGNL 표현식으로 객체의 메서드 호출 -->
            AND email = #{getEmail()}
        </if>
    </select>
</mapper>` 

위의 예제에서는 <if> 요소 내에서 OGNL 표현식을 사용하여 객체의 메서드 getEmail()을 호출하고, 이를 SQL 쿼리에 포함시킵니다.

  1. Java 코드에서 호출:
public class User {
    private String username;
    private String email;
    
    // Getter 및 Setter 생략
    
    // OGNL 표현식에서 사용되는 메서드
    public String getEmail() {
        return email;
    }
}

public class Main {

    public static void main(String[] args) {
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        try (SqlSession sqlSession = sessionFactory.openSession()) {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            
            User filter = new User();
            filter.setUsername("example");
            filter.setEmail("example@example.com");
            
            // OGNL 표현식을 사용한 동적 SQL 쿼리 호출
            List<User> users = userMapper.getUsersByFilter(filter);
            
            System.out.println("Users: " + users);
        }
    }
}` 

위의 Java 코드에서는 getEmail() 메서드를 사용하여 OGNL 표현식을 작성합니다. 이 메서드를 통해 동적 SQL 쿼리에서 필요한 조건을 만족하는 데이터를 조회할 수 있습니다.

OGNL 표현식을 사용하면 Java 객체의 속성 및 메서드를 동적으로 참조하여 SQL 쿼리를 작성할 수 있으므로, 복잡한 동적 SQL 작성에 유용합니다.