第一个例子

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执行三步流程

  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)

Previous:
Next:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注