[Mybatis] XML과 애노테이션의 혼합 사용 예제
MyBatis에서는 XML 매퍼 파일과 애노테이션을 혼합하여 사용할 수 있습니다. 이를 통해 애노테이션을 사용하여 간단한 SQL 쿼리를 정의하고, 복잡한 쿼리는 XML 매퍼 파일에 작성하는 등의 유연한 방법으로 개발할 수 있습니다. 아래는 XML과 애노테이션을 혼합하여 사용하는 예제입니다.
예제: XML과 애노테이션 혼합 사용
- 매퍼 인터페이스 작성:
@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);
}`
- 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>`
- 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 매퍼 파일을 활용하여 보다 가독성 높게 작성할 수 있습니다.