Dapper 저장 프로시저

  1. 저장 프로시저(Stored Procedure): 데이터베이스에 SQL 로직을 미리 작성하고 애플리케이션에서 직접 호출해 실행합니다.
  2. Dapper에서 저장 프로시저 호출 핵심: CommandType.StoredProcedure 를 지정.
  3. 익명 클래스 혹은 엔티티 객체로 매개변수를 전달하면 저장 프로시저 입력 파라미터에 자동 매핑됩니다.
  4. 예시 시나리오: MySQL 저장 프로시저를 생성하고 ID 기준으로 student 데이터를 삭제합니다.

MySQL 저장 프로시저 생성

-- 학생 데이터 삭제용 저장 프로시저 생성
CREATE DEFINER=`root`@`localhost` PROCEDURE `Delete_Student_PROC`(IN `id` INT)
BEGIN
    DELETE FROM student WHERE Id = id;
ENDCode language: JavaScript (javascript)
  • IN id int: 입력 파라미터, 삭제할 기본키 값을 받음
  • BEGIN ~ END: 저장 프로시저 실행 본문
DROP PROCEDURE IF EXISTS Delete_Student_PROC;

저장 프로시저 호출

using System.Data;
using MySql.Data.MySqlClient;
using Dapper;
using System.Configuration;

static void Main(string[] args)
{
    var connStr = ConfigurationManager.ConnectionStrings["StudentConnection"].ConnectionString;
    using (IDbConnection db = new MySqlConnection(connStr))
    {
        // 매개변수 설명:
        // 첫 번째 인자: 저장 프로시저 이름
        // 두 번째 인자: 전달할 파라미터
        // 세 번째 인자: 명령 타입을 저장 프로시저로 반드시 지정
        int affectedRows = db.Execute(
            "Delete_Student_PROC",
            new { id = 2 },
            commandType: CommandType.StoredProcedure
        );

        Console.WriteLine($"영향받은 행 수:{affectedRows}");
    }
    Console.ReadKey();
}Code language: JavaScript (javascript)

조회 결과를 반환하는 저장 프로시저

저장 프로시저가 데이터 조회를 수행할 경우 .Query<T>() 를 사용하세요

List<Student> list = db.Query<Student>(
    "GetAllStudent_PROC",
    null,
    commandType: CommandType.StoredProcedure
).ToList();Code language: PHP (php)
  • 일반 SQL: commandType: CommandType.Text (기본값, 생략 가능)
  • 저장 프로시저: commandType: CommandType.StoredProcedure (명시적으로 꼭 지정해야 함)

Dapper 저장 프로시저

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다