첫 번째 예제

Dapper는 여러 데이터베이스를 지원합니다. 여기서는 MySQL을 예시로 사용하겠습니다.

먼저 MySQL을 직접 설치해야 합니다.

MySQL 설치를 완료한 뒤 데이터베이스를 생성합니다.

그 다음 테이블을 만듭니다.

도입하기

1. NuGet 패키지 설치

두 가지 패키지를 모두 설치해야 합니다.

  1. Dapper(경량 ORM 핵심 라이브러리)
Install-Package Dapper
  1. 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단계

  1. IDbConnection 데이터베이스 연결 객체 생성(MySqlConnection/SqlConnection)
  2. SQL 문을 직접 작성해 CRUD 구현
  3. 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)

첫 번째 예제

Next:

답글 남기기

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