MyBatis에서 return type을 설정하는 방법은 크게 매핑 결과를 객체에 매핑하는 방법과 매핑된 결과를 컬렉션으로 받는 방법에 따라 다르다. 일반적으로 MyBatis는 SQL 쿼리의 결과를 매핑할 객체 타입을 명시적으로 설정하거나, 반환되는 타입을 자동으로 매핑할 수 있도록 설정한다.
int, String, Date 등의 기본 타입이나 Java 객체를 반환하는 경우에 해당합니다.
Mapper XML
<select id="getUserById" resultType="com.example.User">
SELECT id, name, email
FROM users
WHERE id = #{id}
</select>
이 예시에서, getUserById는 User 객체를 반환한다. MyBatis는 resultType 속성을 사용하여 반환될 객체 타입을 지정한다.
Mapper 인터페이스에서 설정
@Mapper
public interface UserMapper {
User getUserById(int id);
}
getUserById 메서드는 User 객체를 반환한다. 이 메서드에서 반환된 결과는 User 클래스의 속성에 자동으로 매핑된다. 이때 Java 객체의 필드명 <-> 쿼리 결과 컬럼명이 일치하면 Setter가 호출되어 각 필드에 값을 바인딩한다. 그러나, 단일 기본 타입(int, String, Date 등)으로 반환 시에는 결과의 첫컬럼을 그대로 매핑한다.
결과가 여러 개의 레코드일 경우, MyBatis는 List나 Set 같은 컬렉션 타입으로 반환할 수 있다. 이 때도 resultType을 명시하거나, resultMap을 사용할 수 있다.
Mapper XML(리스트 반환)
<select id="getAllUsers" resultType="com.example.User">
SELECT id, name, email
FROM users
</select>
이 예시에서는 여러 명의 User를 반환하고, 그 결과는 List<User>로 자동 매핑됩니다.
Mapper 인터페이스에서 설정(리스트 반환)
@Mapper
public interface UserMapper {
List<User> getAllUsers();
}
getAllUsers 메서드는 여러 개의 User 객체를 포함하는 List를 반환합니다.