Dapper는 여러 데이터베이스를 지원합니다. 여기서는 MySQL을 예시로 사용하겠습니다.
먼저 MySQL을 직접 설치해야 합니다.
MySQL 설치를 완료한 뒤 데이터베이스를 생성합니다.
그 다음 테이블을 만듭니다.
도입하기
1. NuGet 패키지 설치
두 가지 패키지를 모두 설치해야 합니다.
- Dapper(경량 ORM 핵심 라이브러리)
Install-Package Dapper
- MySql.Data(MySQL 데이터베이스 드라이버,
MySqlConnection제공)
Dapper 자체에는 데이터베이스 드라이버가 포함되지 않습니다. MySQL에 접속하려면 드라이버를 별도로 설치해야 합니다.
2. 데이터베이스 테이블 생성
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`StudentID` int NOT NULL AUTO_INCREMENT,
`StudentName` text,
`Age` int,
`ClassName` text,
PRIMARY KEY (`StudentID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;Code language: SQL (Structured Query Language) (sql)
C# 엔티티 클래스
테이블 필드 이름과 일치시키면 Dapper가 자동으로 매핑합니다.
public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
public int Age { get; set; }
public string ClassName { get; set; }
}Code language: C# (cs)
규칙:필드와 엔티티 속성은 대소문자를 구분하지 않으며 이름만 같으면 자동 매핑됩니다.
설정 파일
App.config
원본 이미지 오류 수정:providerName을 Oracle로 적지 마세요. MySQL에서는 해당 설정이 필요하지 않으므로 그냥 삭제하면 됩니다.
연결 문자열을 설정합니다
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<connectionStrings>
<add name="StudentConnection"
connectionString="Server=localhost;Database=mydb;Uid=root;Pwd=root"/>
</connectionStrings>
</configuration>Code language: HTML, XML (xml)
예제 코드
using System;
using System.Collections.Generic;
using System.Data;
using Dapper;
using MySql.Data.MySqlClient;
using System.Configuration;
class Program
{
static void Main(string[] args)
{
List<Student> studentList = new List<Student>();
// 설정 파일에서 연결 문자열 읽기
string connStr = ConfigurationManager.ConnectionStrings["StudentConnection"].ConnectionString;
// 1. IDbConnection 데이터베이스 연결 생성
using (IDbConnection db = new MySqlConnection(connStr))
{
// 2. SQL 작성, 3.Dapper 확장 메서드로 쿼리 실행, 엔티티 자동 매핑
string sql = "SELECT * FROM student";
studentList = db.Query<Student>(sql).ToList();
Console.WriteLine($"학생 총 수:{studentList.Count}");
}
Console.ReadKey();
}
}Code language: C# (cs)
Dapper 실행 3단계
IDbConnection데이터베이스 연결 객체 생성(MySqlConnection/SqlConnection)- SQL 문을 직접 작성해 CRUD 구현
- SQL과 매개변수를 Dapper 확장 메서드에 전달(Query/Execute)
SQL 인젝션
매개변수화 쿼리를 사용하면 SQL 인젝션을 완전히 막을 수 있습니다.
문자열 합성으로 SQL을 만들면 인젝션 위험이 존재합니다.
string sql = "SELECT * FROM student WHERE StudentID = @Id";
var stu = db.QueryFirstOrDefault<Student>(sql, new { Id = 1 });Code language: C# (cs)
첫 번째 예제