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 ...
随机推荐
- 读书笔记:《HTML5开发手册》--HTML5新的结构元素
读书笔记:<HTML5开发手册> (HTML5 Developer's CookBook) 虽然从事前端开发已有很长一段时间,对HTML5标签也有使用,但在语义化上面理解还不够清晰.之前在 ...
- socket读写返回值的处理
在调用socket读写函数read(),write()时,都会有返回值.如果没有正确处理返回值,就可能引入一些问题 总结了以下几点 1当read()或者write()函数返回值大于0时,表示实际从缓冲 ...
- Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)
背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...
- 探索C#之6.0语法糖剖析
阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...
- 使用etree.HTML的编码问题
title: 使用etree.HTML的编码问题 date: 2015-10-07 17:56:47 categories: [Python] tags: [Python, lxml, Xpath] ...
- 猖獗的假新闻:2017年1月1日起iOS的APP必须使用HTTPS
一.假新闻如此猖獗 刚才一位老同事 打电话问:我们公司还是用的HTTP,马上就到2017年了,提交AppStore会被拒绝,怎么办? 公司里已经有很多人问过这个问题,回答一下: HTTP还是可以正常提 ...
- 安卓易学,爬坑不易——腾讯老司机的RecyclerView局部刷新爬坑之路
针对手游的性能优化,腾讯WeTest平台的Cube工具提供了基本所有相关指标的检测,为手游进行最高效和准确的测试服务,不断改善玩家的体验.目前功能还在免费开放中. 点击地址:http://wetest ...
- JQuery easyUI DataGrid 创建复杂列表头(译)
» Create column groups in DataGrid The easyui DataGrid has ability to group columns, as the followin ...
- Eclipse出现"Running Android Lint has encountered a problem"解决方案
安装eclipse for android 时候的错误记录,转载自:http://blog.csdn.net/chenyufeng1991/article/details/47442555 (1)打开 ...
- 监控 SQL Server (2005/2008) 的运行状况
Microsoft SQL Server 2005 提供了一些工具来监控数据库.方法之一是动态管理视图.动态管理视图 (DMV) 和动态管理函数 (DMF) 返回的服务器状态信息可用于监控服务器实例的 ...