[Mybatis] 프로시저 매핑(Stored Procedure Mapping) 예제

MyBatis를 사용하여 저장 프로시저(Stored Procedure)를 호출하고 매핑하는 방법은 다소 복잡할 수 있지만, 아래의 예제를 통해 기본적인 프로시저 매핑을 보여드리겠습니다. 프로시저 호출 및 매핑은 데이터베이스 종류에 따라 다를 수 있으므로, 사용하는 데이터베이스에 따라 설정을 조정해야 합니다. 아래 예제는 MySQL 데이터베이스를 기준으로 합니다.

예제: 프로시저 매핑

  1. MySQL에서 프로시저 생성:

    먼저 MySQL 데이터베이스에서 예제 프로시저를 생성합니다.

DELIMITER //

CREATE PROCEDURE GetEmployee(IN employeeId INT)
BEGIN
    SELECT * FROM employees WHERE id = employeeId;
END //` 
  1. Java 클래스 생성:

    프로시저 결과를 매핑할 Java 클래스를 생성합니다.

public class Employee {
    private int id;
    private String name;
    private String department;
    
    // Getter와 Setter 메서드
}` 
  1. MyBatis XML 매퍼 파일 작성:

    프로시저 호출을 위한 XML 매퍼 파일을 작성합니다.

<!-- EmployeeMapper.xml -->
<mapper namespace="com.example.EmployeeMapper">
    <resultMap id="employeeResultMap" type="com.example.Employee">
        <id property="id" column="id" />
        <result property="name" column="name" />
        <result property="department" column="department" />
    </resultMap>

    <select id="getEmployee" parameterType="map" resultMap="employeeResultMap">
        {call GetEmployee(#{employeeId, mode=IN, jdbcType=INTEGER})}
    </select>
</mapper>` 
  1. Java 인터페이스 생성:

    프로시저를 호출하기 위한 매퍼 인터페이스를 생성합니다.

@Mapper
public interface EmployeeMapper {

    Employee getEmployee(@Param("employeeId") int employeeId);
}` 
  1. Spring Boot 어플리케이션 설정:

    Spring Boot 어플리케이션에서 MyBatis를 설정합니다. DataSourceSqlSessionFactory 설정을 필요에 따라 추가해야 합니다.

  2. 프로시저 호출:

    Java 코드에서 프로시저를 호출하고 결과를 매핑합니다.

@SpringBootApplication
public class MybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisApplication.class, args);
    }

    @Autowired
    private EmployeeMapper employeeMapper;

    public void callProcedure() {
        int employeeId = 1;
        Employee employee = employeeMapper.getEmployee(employeeId);
        System.out.println("Employee ID: " + employee.getId());
        System.out.println("Employee Name: " + employee.getName());
        System.out.println("Department: " + employee.getDepartment());
    }
}` 

위의 예제에서는 MyBatis를 사용하여 MySQL 저장 프로시저를 호출하고 그 결과를 Employee 클래스로 매핑합니다. 프로시저 호출 시 parameterType으로 매개변수를 설정하고, {call ...} 형식으로 프로시저를 호출합니다.

실제 프로시저의 내용과 데이터베이스 설정에 따라 설정이 다를 수 있으며, 사용하는 데이터베이스 종류에 따라 프로시저 호출 및 매핑 방법이 달라질 수 있습니다.