[Mybatis] XML과 애노테이션의 혼합 사용 예제

MyBatis에서는 XML 매퍼 파일과 애노테이션을 혼합하여 사용할 수 있습니다. 이를 통해 애노테이션을 사용하여 간단한 SQL 쿼리를 정의하고, 복잡한 쿼리는 XML 매퍼 파일에 작성하는 등의 유연한 방법으로 개발할 수 있습니다. 아래는 XML과 애노테이션을 혼합하여 사용하는 예제입니다.

예제: XML과 애노테이션 혼합 사용

  1. 매퍼 인터페이스 작성:
@Mapper
public interface UserMapper {

    // 애노테이션을 사용하여 간단한 쿼리 정의
    @Select("SELECT * FROM users WHERE id = #{id}")
    Optional<User> getUserById(@Param("id") int id);

    // XML 매퍼 파일에서 정의된 쿼리 사용
    List<User> getUsersByName(@Param("name") String name);
}` 
  1. XML 매퍼 파일 작성:

UserMapper.xml 파일에 XML을 사용하여 더 복잡한 쿼리를 정의합니다.

<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
    <!-- getUsersByName 쿼리 -->
    <select id="getUsersByName" resultType="User">
        SELECT * FROM users WHERE name = #{name}
    </select>
</mapper>` 
  1. Java 코드에서 사용:
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);
            
            // 애노테이션을 사용한 간단한 쿼리 호출
            Optional<User> userOptional = userMapper.getUserById(1);
            
            // XML 매퍼 파일에서 정의된 쿼리 호출
            List<User> users = userMapper.getUsersByName("John");
            
            // 결과 출력
            userOptional.ifPresent(user -> System.out.println("User by ID: " + user));
            users.forEach(user -> System.out.println("Users by Name: " + user));
        }
    }
}` 

위의 예제에서는 UserMapper 인터페이스에서 애노테이션을 사용하여 간단한 쿼리를 정의하고, XML 매퍼 파일에서 더 복잡한 쿼리를 정의합니다. Java 코드에서는 인터페이스를 통해 애노테이션으로 정의한 쿼리와 XML 매퍼 파일에서 정의한 쿼리를 모두 호출할 수 있습니다.

이렇게 XML과 애노테이션을 혼합하여 사용하면 간단한 쿼리는 애노테이션을 사용하여 빠르게 정의하고, 복잡한 쿼리는 XML 매퍼 파일을 활용하여 보다 가독성 높게 작성할 수 있습니다.