[java] MyBatis에서 파라미터 처리하기

MyBatis는 자바 객체와 SQL 문 사이의 매핑을 쉽게 처리해주는 ORM(Object-Relational Mapping) 프레임워크입니다. MyBatis를 사용할 때 파라미터를 효과적으로 처리하는 방법에 대해 알아보겠습니다.

1. 단일 파라미터 전달

만약 SQL 문에 한 개의 파라미터만 필요하다면, 해당 파라미터를 직접 전달할 수 있습니다. 예를 들어, 아래와 같은 SQL 문이 있다고 가정해봅시다.

SELECT * FROM users WHERE id = #{userId}

Java 코드에서는 다음과 같이 파라미터를 전달할 수 있습니다.

@Selelct("SELECT * FROM users WHERE id = #{userId}")
User getUserById(int userId);

2. 여러 개의 파라미터 전달

SQL 문에 여러 개의 파라미터가 필요할 때는, 자바에서 객체를 생성하여 파라미터 값을 넘겨줄 수 있습니다. 예를 들어, 아래와 같은 SQL 문이 있다고 가정해봅시다.

INSERT INTO users (name, age) VALUES (#{name}, #{age})

Java 코드에서는 다음과 같이 객체를 생성하여 파라미터를 전달할 수 있습니다.

@Insert("INSERT INTO users (name, age) VALUES (#{user.name}, #{user.age})")
void insertUser(@Param("user") User user);

3. 동적 쿼리 처리

MyBatis는 동적 쿼리를 처리하기 위한 다양한 기능을 제공합니다. 예를 들어, WHERE 절이나 SET 절에서 조건에 따라 쿼리를 동적으로 조합할 수 있습니다. 이를 위해 MyBatis에서는 <if>, <choose>, <when>, <otherwise> 등의 태그를 사용합니다.

아래의 예제는 User 객체를 검색 조건으로 사용하여 동적 쿼리를 작성하는 방법을 보여줍니다.

@Select({
  "<script>",
  "SELECT * FROM users",
  "WHERE 1=1",
  "<if test='name != null'>",
  "AND name = #{name}",
  "</if>",
  "<if test='age != null'>",
  "AND age = #{age}",
  "</if>",
  "</script>"
})
List<User> searchUsers(@Param("name") String name, @Param("age") Integer age);

위 예제에서는 nameage 파라미터에 따라 동적으로 쿼리를 생성하고 있습니다. name 파라미터가 null이 아니면 AND name = #{name} 부분이 추가되고, age 파라미터가 null이 아니면 AND age = #{age} 부분이 추가됩니다.

결론

MyBatis에서 파라미터를 처리하는 방법을 살펴보았습니다. 단일 파라미터, 여러 개의 파라미터, 그리고 동적 쿼리 처리까지 다양한 방법을 사용할 수 있습니다. MyBatis를 효과적으로 사용하여 데이터베이스와의 상호작용을 간단하게 처리할 수 있습니다.

더 많은 정보를 원하시면 MyBatis 공식 문서를 참고해보세요.


이 글은 [Tech Blog]에서 작성된 글입니다.