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