- 저장 프로시저(Stored Procedure): 데이터베이스에 SQL 로직을 미리 작성하고 애플리케이션에서 직접 호출해 실행합니다.
- Dapper에서 저장 프로시저 호출 핵심:
CommandType.StoredProcedure를 지정. - 익명 클래스 혹은 엔티티 객체로 매개변수를 전달하면 저장 프로시저 입력 파라미터에 자동 매핑됩니다.
- 예시 시나리오: 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 저장 프로시저
Previous: Dapper 삭제 작업
Next: IN 쿼리