[Mybatis] ResultHandler 결과 처리 예제

ResultHandler는 MyBatis에서 쿼리 결과를 커스텀하게 처리하기 위한 인터페이스입니다. 이를 사용하여 조회된 데이터를 원하는 형식으로 가공하거나 추가 로직을 수행할 수 있습니다. 아래는 ResultHandler를 사용한 결과 처리 예제입니다.

예제: ResultHandler를 사용한 결과 처리

import org.apache.ibatis.session.ResultContext;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.util.ArrayList;
import java.util.List;

public class ResultHandlerExample {

    public static void main(String[] args) {
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
                .build(ResultHandlerExample.class.getResourceAsStream("/mybatis-config.xml"));

        try (SqlSession sqlSession = sessionFactory.openSession()) {
            List<Book> books = new ArrayList<>();
            ResultHandler<Book> resultHandler = new ResultHandler<Book>() {
                @Override
                public void handleResult(ResultContext<? extends Book> resultContext) {
                    // 조회된 각 Book 객체를 커스텀한 방식으로 처리
                    Book book = resultContext.getResultObject();
                    // 예시로 각 Book의 제목을 대문자로 변경하여 리스트에 추가
                    book.setTitle(book.getTitle().toUpperCase());
                    books.add(book);
                }
            };

            sqlSession.select("selectAllBooks", resultHandler);

            // 커스텀 처리된 결과 확인
            for (Book book : books) {
                System.out.println("Book Title: " + book.getTitle());
            }
        }
    }
}` 

위의 예제에서는 ResultHandler 인터페이스를 구현하여 각 조회 결과를 커스텀하게 처리하고 있습니다. handleResult 메서드를 오버라이드하여 조회된 Book 객체의 제목을 대문자로 변경하여 리스트에 추가하는 방식으로 결과를 가공하였습니다.

selectAllBooks는 예시로서 해당 매퍼 메서드는 필요한 매퍼 XML 설정이 있어야 합니다. ResultHandler를 사용하면 조회된 데이터를 원하는 형식으로 가공하거나 특별한 처리를 수행할 수 있습니다.