Dapper如何实现增删改查 Dapper CRUD操作完整指南
技术百科
幻夢星雲
发布时间:2026-01-01
浏览: 次 Dapper通过Query、Execute等扩展方法配合原生SQL实现CRUD,不提供ORM抽象但支持参数化查询、自动对象映射、事务控制及自增ID获取;需注意SQL注入防护、影响行数校验与事务一致性。
Dapper 本身不提供“内置”的增删改查方法,而是通过扩展方法(如 Query、Execute)配合原生 SQL 实现高效、轻量的 CRUD 操作。它不做 ORM 映射层抽象,但用极简方式把 SQL 执行和对象映射封装得非常自然。
查询(Read):用 Query 获取单条或多条数据
Query
- 查多条:var users = conn.Query
("SELECT * FROM Users WHERE Age > @age", new { age = 18 }); - 查单条:var user = conn.QueryFirstOrDefault
("SELECT * FROM Users WHERE Id = @id", new { id = 1 }); - 查标量值(如 COUNT):var count = conn.ExecuteScalar
("SELECT COUNT(*) FROM Users");
插入(Create):用 Execute 执行 INSERT 并获取自增 ID
Execute 返回受影响行数;若主键是数据库自增(如 SQL Server 的 IDENTITY),可用 SCOPE_IDENTITY() 获取刚插入的 ID。
- 普通插入:conn.Execute("INSERT INTO Users (Name, Email) VALUES (@name, @email)", new { name = "张三", email = "zhang@example.com" });
- 带返回 ID:var id = conn.QuerySingle
("INSERT INTO Users (Name, Email) VALUES (@name, @email); SELECT CAST(SCOPE_IDENTITY() as int)", new { name = "李四", email = "li@example.com" });
更新与删除(Update / Delete):统一用 Execute + 参数化 SQL
Update 和 Delete 都属于“执行无结果集”的操作,全部走 Execute 方法,强调参数安全和影响行数校验。
- 更新:int rows = conn.Execute("UPDATE Users SET Name = @name WHERE Id = @id", new { name = "王五", id = 1 }); if (rows == 0) throw new InvalidOperationException("未找到要更新的记录");
- 删除:int deleted = conn.Execute("DELETE FROM Users WHERE Id = @id", new { id = 1 });
- 软删除建议:UPDATE Users SET IsDelet
ed = 1 WHERE Id = @id —— Dapper 不管业务逻辑,只负责执行你写的 SQL。
批量操作与事务:用 Transaction 包裹多个 CRUD
Dapper 不封装批量插入(如 BulkInsert),但可轻松结合事务保证一致性。SQL Server 可搭配 SqlServerBulkCopy,或用 UNION ALL / 表值参数等原生方式。
- 事务示例:using var tx = conn.BeginTransaction(); try { conn.Execute("INSERT...", new {...}, tx); conn.Execute("UPDATE...", new {...}, tx); tx.Commit(); } catch { tx.Rollback(); throw; }
- 批量插入技巧(非 Dapper 原生):拼接多值 INSERT(适合几百条以内),或用 DataTable + SqlBulkCopy(需额外引用 System.Data.SqlClient 或 Microsoft.Data.SqlClient)。
基本上就这些。Dapper 的 CRUD 不复杂但容易忽略细节——比如不加参数化易被注入,不检查 Execute 返回值可能掩盖更新失败,不配事务导致数据不一致。写清楚 SQL,交给 Dapper 去执行和映射,就是它最稳的用法。
# ai
# 多个
# 你写
# 最常用
# app
# 不做
# microsoft
# 对象
# if
# int
# 数据库
# var
# delete
# 封装
# select
# try
# throw
# catch
# sql
# 行数
# count
# 或用
# 多条
# using
# 不加
# column
# 值参数
# union
# li
# sql注入
# 单条
# sqlserver
# 并获
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Windows10怎么用“讲述人”读屏辅助 Win
- 如何处理“XML格式不正确”错误 常见XML we
- PHP怎么接收URL中的锚点参数_获取#后面参数值
- C++如何使用std::optional?(处理可
- Python数据挖掘进阶教程_分类回归与聚类案例解
- Win11怎么恢复出厂设置_Win11重置此电脑保
- 如何使用Golang构建简易投票统计功能_Gola
- Python项目维护经验_长期演进说明【指导】
- 如何在Golang中处理URL参数_Golang
- Python实现图数据库操作_Neo4j核心CRU
- Python路径拼接规范_跨平台处理说明【指导】
- Win11怎么开启游戏模式_Windows11优化
- Python装饰器复用技巧_通用能力解析【教程】
- 如何使用Golang捕获并记录协程panic_保证
- Win11怎么恢复误删照片_Win11数据恢复工具
- Mac如何修复应用程序权限问题_Mac磁盘工具修复
- 如何使用Golang table-driven基准
- Linux如何申请SSL免费证书_Linux下Ce
- Windows10电脑怎么设置自动连接WiFi_W
- 如何使用Golang log设置日志输出格式_Go
- Win11怎么设置桌面图标间距_Windows11
- Python安全爬虫设计_IP代理池与验证码识别策
- Windows的便笺功能如何使用?(桌面备忘技巧)
- Win11怎么开启上帝模式_创建Windows 1
- Python网页解析流程_html结构说明【指导】
- Go语言中slice追加操作的底层共享机制解析
- Win10 BitLocker加密教程 Win10
- 如何优化Golang Web性能_Golang H
- c# Task.Yield 的作用是什么 它和Ta
- Win11文件扩展名怎么显示_Win11查看文件后
- Win11怎么关闭通知消息_屏蔽Windows 1
- Win11怎么调整屏幕亮度_Windows 11调
- Win11怎么压缩文件 Win11自带压缩解压功能
- PowerShell怎么创建复杂的XML结构
- Python大型项目拆分策略_模块化解析【教程】
- SAX解析器是什么,它与DOM在处理大型XML文件
- Win11怎么更改鼠标指针_Windows 11自
- Python异步编程高级项目教程_asyncio协
- Python文件操作优化_大文件与流处理解析【教程
- phpstudy本地环境mysql忘记密码_重置m
- Win11怎么设置闹钟_Windows 11时钟应
- Python对象生命周期管理_创建销毁解析【教程】
- c++怎么用jemalloc c++替换默认内存分
- Win11如何设置文件关联 Win11修改特定文件
- 如何使用 Selenium 正确获取篮球参考网站球
- php怎么下载安装后测试是否成功_简单脚本验证方法
- 手机php文件怎么变成mp4_安卓苹果打开php转
- PythonPandas数据分析教程_数据清洗与处
- Drupal 中 HTML 链接被双重转义导致渲染
- PHP cURL GET请求:正确设置认证与自定义

ed = 1 WHERE Id = @id —— Dapper 不管业务逻辑,只负责执行你写的 SQL。
QQ客服