Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示
Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下:
完整Demo:http://pan.baidu.com/s/1i3TcEzj
注 意 事 项:http://www.cnblogs.com/dunitian/p/5221058.html
平台之大势何人能挡? 带着你的Net飞奔吧!
先安装一下Dapper(建议用nuget包来管理)


连接字符串:
string connStr = "Data Source=.;Initial Catalog=DapperDB;User ID=用户名;Password=密码";
强类型:
#region 强类型
//public static IEnumerable<T> Query<T>(this IDbConnection cnn, string sql, object param = null, SqlTransaction transaction = null, bool buffered = true)
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open(); //无参查询
//var qqModeList = conn.Query<QQModel>("select Id,Name,Count from QQModel");
//带参查询
var qqModeList = conn.Query<QQModel>("select Id,Name,Count from QQModel where Id in @id and Count>@count", new { id = new int[] { 1, 2, 3, 4, 5, 6 }, count = 1 });
foreach (var item in qqModeList)
{
Console.WriteLine(item.Id + " " + item.Name + " " + item.Count);
}
}
#endregion
动态类型:
#region 动态类型
////逆天动态类型用的比较多[可能是MVC ViewBag用多了]
//public static IEnumerable<dynamic> Query (this IDbConnection cnn, string sql, object param = null, SqlTransaction transaction = null, bool buffered = true)
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
var qqModeList = conn.Query("select Id,Name,Count from QQModel").ToList();
foreach (var item in qqModeList)
{
Console.WriteLine(item.Id + " " + item.Name + " " + item.Count);
}
}
#endregion
多映射:
using (SqlConnection conn = new SqlConnection(connStr))
{
string sqlStr = @"select A.Id,A.Title,S.SeoKeywords from Article A
inner join SeoTKD S on A.SeoId=S.Id
where A.Id in @ids";
conn.Open();
var articleList = conn.Query(sqlStr, new { ids = new int[] { 41, 42, 43, 44, 45, 46, 47, 48 } });
foreach (var item in articleList)
{
Console.WriteLine(item.Id + " | " + item.SeoKeywords + " | :" + item.Title);
}
}
多返回值:
using (SqlConnection conn = new SqlConnection(connStr))
{
string sqlStr = @"select Id,Title,Author from Article where Id = @id
select * from QQModel where Name = @name
select * from SeoTKD where Status = @status";
conn.Open();
using (var multi = conn.QueryMultiple(sqlStr, new { id = 11, name = "打代码", status = 99 }))
{
//multi.IsConsumed reader的状态 ,true 是已经释放
if (!multi.IsConsumed)
{
//注意一个东西,Read获取的时候必须是按照上面返回表的顺序 (article,qqmodel,seotkd)
//强类型
var articleList = multi.Read<Temp>();//类不见得一定得和表名相同
var QQModelList = multi.Read<QQModel>();
var SeoTKDList = multi.Read<SeoTKD>(); //动态类型
//var articleList = multi.Read();
//var QQModelList = multi.Read();
//var SeoTKDList = multi.Read(); #region 输出
foreach (var item in QQModelList)
{
Console.WriteLine(item.Id + " " + item.Name + " " + item.Count);
}
foreach (var item in SeoTKDList)
{
Console.WriteLine(item.Id + " | " + item.SeoKeywords);
}
foreach (var item in articleList)
{
Console.WriteLine(item.Author);
}
#endregion
} }
}
增删改查:(删项目里面基本上不用)
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
//增
int count = conn.Execute("insert into Article values(@title,@content,@author,961,1,2,2,N'2015-11-23 11:06:36.553',N'2015-11-23 11:06:36.553',N'5,103,113',91,N'3,5,11',0,N'/Images/article/16.jpg')", new { title = "Title1", content = "TContent1", author = "毒逆天" }); //改
//int count = conn.Execute("update Article set Title=@title where Id=@id", new { title = "么么哒", id = 274 });
if (count > 0)
{
Console.WriteLine(count + "条操作成功");
}
}
存储过程:
//查询
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
//参数名得和存储过程的变量名相同(参数可以跳跃传,键值对方式即可)
//动态类型
//var list = conn.Query("usp_test", new { aId = 11 }, commandType: CommandType.StoredProcedure);
//强类型
var list = conn.Query<TitleAndKeyWords>("usp_test", new { aId = 11 }, commandType: CommandType.StoredProcedure);
foreach (var item in list)
{
Console.WriteLine(item.Id + " | " + item.SeoKeywords + " | :" + item.Title);
}
} //插入
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
int count = conn.Execute("usp_insertArticle", new { title = "Title11", content = "TContent1", author = "毒逆天" }, commandType: CommandType.StoredProcedure);
if (count > 0)
{
Console.WriteLine(count + "条操作成功");
}
} //更新
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
int count = conn.Execute("usp_updateArticle", new { id = 276, title = "Dapper使用" }, commandType: CommandType.StoredProcedure);
if (count > 0)
{
Console.WriteLine(count + "条操作成功");
}
}
事物的使用:
先看看ADO.Net怎么用的
using (SqlConnection conn = new SqlConnection(connStr))
{
string sql = @"insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 999999999999999999999999)
insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
";
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
conn.Open();
cmd.Transaction = conn.BeginTransaction();
try
{
int i = cmd.ExecuteNonQuery();
cmd.Transaction.Commit();
Console.WriteLine(i);
}
catch (Exception ex)
{
cmd.Transaction.Rollback();
Console.WriteLine(ex);
}
}
}
再看看Dapper的
using (SqlConnection conn = new SqlConnection(connStr))
{
string sql = @"insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 9999999999999999999)
insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
";
conn.Open();
var transaction = conn.BeginTransaction();
try
{
int i = conn.Execute(sql, transaction: transaction);
transaction.Commit();
Console.WriteLine(i);
}
catch (Exception ex)
{
transaction.Rollback();
Console.WriteLine(ex);
}
}
Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示的更多相关文章
- Hibernate操作指南-实体与常用类型的映射以及基本的增删改查(基于注解)
- Django 06 Django模型基础1(ORM简介、数据库连接配置、模型的创建与映射、数据的增删改查)
Django 06 Django模型基础1(ORM简介.数据库连接配置.模型的创建与映射.数据的增删改查) 一.ORM系统 #django模型映射关系 #模型类-----数据表 #类属性-----表字 ...
- entity framework 新手入门篇(2)-entity framework基本的增删改查
经过前两节的简单描述,终于可以进入entity framework的使用部分了.本节将对entity framework原生的增删改查进行讲解. 承接上面的部分,我们有一个叫做House的数据库,其中 ...
- Spring Boot入门系列(六)如何整合Mybatis实现增删改查
前面介绍了Spring Boot 中的整合Thymeleaf前端html框架,同时也介绍了Thymeleaf 的用法.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/z ...
- django--orm对象关系映射之常用的增删改查
1.查询表里所有数据 book=models.Book.objects.all() 2.条件查询 book = models.Book.objects.filter(id=1).first() # 查 ...
- 快速入门GreenDao框架并实现增删改查案例
大家的项目中不可避免的使用到SQLite,为此我们要花费心思编写一个增删改查框架.而一个好的ORM框架则能够给我们带来极大的方便,今天给大家讲解一个非常火热的ORM-GreenDao. 基本概念 Gr ...
- MybatisMapper 动态映射(增删改查)
//接口内容以及注意事项 package cn.jy.mybatis.mapper; import java.util.List; import cn.jy.mybatis.pojo.User; pu ...
- 由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序
异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 今天帮群友整理Dapper基础教程的时候手脚快了点,然后遇到了一个小问题,Dapp ...
- MongoDB入门(介绍、安装、增删改查)
文章作者公众号bigsai,已收录在回车课堂,如有帮助还请不吝啬点个赞赞支持一下! 课程导学 大家好我是bigsai,我们都学过数据库,但你可能更熟悉关系(型)数据库例如MySQL,SQL SERVE ...
随机推荐
- VM(虚拟机安装win7 提示 :units specified don't exist, SHSUCDX can't install)解决方法
改成IDE的模式
- 使用Monit监控本地进程
目前用它监控某些服务,失败自动重启,同时监控特定的日志文件,如果有变化,就发邮件报警 安装不细写了,网上好多 我先用cat /proc/version看了下我的系统是el6的,于是wget http: ...
- 札记:android手势识别,MotionEvent
摘要 本文是手势识别输入事件处理的完整学习记录.内容包括输入事件InputEvent响应方式,触摸事件MotionEvent的概念和使用,触摸事件的动作分类.多点触摸.根据案例和API分析了触摸手势T ...
- ASP.NET Aries 入门开发教程1:框架下载与运行
背景: 鉴于框架的使用者越来越多,文档太少,不少用户反映框架的入门门槛太高. 好吧,再辛苦下,抽时间写教程吧! 步骤1:下载框架源码 开源地址:https://github.com/cyq1162/A ...
- 用神奇的currentColor制作简洁的颜色动画效果
先上一个兼容性总结图:老版本ie可以直接用复杂方法了,套用某表情包的话: 2016年了,做前端你还考虑兼容IE6?你这简直是自暴自弃! 好了,知道了兼容性,我们可以放心的使用了. 在CSS3中扩展了 ...
- AJAX实现登录界面
使用php跳转界面和AJAX都可实现登录界面的跳转的登录失败对的提醒.但是,php跳转的方式 需要额外加载其他界面,用户体验差.AJAX可实现当前页面只刷新需要的数据,不对当前网页进行 重新加载或者是 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- JQuery中的siblings()是什么意思
jQuery siblings() 方法返回被选元素的所有同胞元素,并且可以使用可选参数来过滤对同胞元素的搜索. 实例演示:点击某个li标签后将其设置为红色,而其所有同胞元素去除红色样式. 1.创建H ...
- 类型转换器(InitBinder 初始化绑定器)
单日期格式 导入jar包 创建FirstController.java @Controller public class FirstController { /** * @param binder * ...
- ASP.NET Core 缓存技术 及 Nginx 缓存配置
前言 在Asp.Net Core Nginx部署一文中,主要是讲述的如何利用Nginx来实现应用程序的部署,使用Nginx来部署主要有两大好处,第一是利用Nginx的负载均衡功能,第二是使用Nginx ...