Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下:

完整Demohttp://pan.baidu.com/s/1i3TcEzj

注 意 事 项:http://www.cnblogs.com/dunitian/p/5221058.html

平台之大势何人能挡? 带着你的Net飞奔吧!

http://www.cnblogs.com/dunitian/p/4822808.html#skill

先安装一下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();
                        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);
                }
            }

 

时间: 2024-08-22 14:35:37

Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示的相关文章

mybatis 一对多配置关系实现在一个映射文件中进行增删改查?

问题描述 mybatis 一对多配置关系实现在一个映射文件中进行增删改查? 一对多关系表,如何在一个映射文件中实现对两个表的增删改查操作? 解决方案 http://wenku.baidu.com/link?url=Pxf2M0_Xb42weBxGfesIrn2_nCLTCEQZr1ZuOxvq5-nu_w1rBkgltw7Qlz-iBnv7lDfGf8h_J7i9plUEzaQfpI5JviC0NsTnyV95fdyUwvu 解决方案二: 你在xml定义两个表的sql匹配就行.增删改查就对这两个

cassandra入门(一):jdbc连接cassandra作增删改查

先分享一个最新的cassandra-java-driver文档,点击电子书分享里的链接,找到javaDriver21.pdf. 该文档内容比较全,包含:jdbc连接cassandra集群,执行cql增删改查,批量查询,异步查询,cql的类型和java类型的映射关系及用户自定义类型使用,ORM等. Cassandra是一个NoSql数据库,纯java编写,apache的顶级项目,主页:http://cassandra.apache.org/(简介不多说网上有). 入门步骤:(我的jdk版本是1.7

【HIBERNATE框架开发之七】HIBERNATE使用ANNOTATION中各种关系映射的CRUD(增删改查)&amp;&amp;集合映射&amp;&amp;继承映射

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/822.html       首先对于Annotation中CRUD的C(Create)操作:-------- 假设 :   User (MonyToOne)       Group OK,那么有如下 Junit Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Conf

spring入门((12) spring与hibernate整合完成增删改查的操作

本文是在上一篇博文的基础之上,通过继承HibernateDaoSupport调用hibernateTemplate类,只要将UserDaoImpl.java 改为继承HibernateDaoSupport类,还有spring-dao.xml文件加入对HibernateDaoSupport的配置bean即可,具体实现源码如 下: UserDaoImpl.java package www.csdn.spring.hibernate.dao.copy; import java.util.List; i

由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序

异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 今天帮群友整理Dapper基础教程的时候手脚快了点,然后遇到了一个小问题,Dapper QueryMultiple 返回数据的问题 多个返回值用QueryMultiple ,这个大家都知道,如果不清楚的看下下面的文档: 这个是官方文档: Multiple Results Dapper allows you to process multiple result grids in a

二、SQL语句映射文件(2)增删改查、参数、缓存

 二.SQL语句映射文件(2)增删改查.参数.缓存 2013-09-06 17:05:42 标签:配置文件 动态 元素 MyBatis学习 之 一.MyBatis简介与配置MyBatis+Spring+MySql MyBatis学习 之 二.SQL语句映射文件(1)resultMap MyBatis学习 之 二.SQL语句映射文件(2)增删改查.参数.缓存 MyBatis学习 之 三.动态SQL语句 MyBatis学习 之 四.MyBatis配置文件 2.2 select 一个select 元素

link中new出来的,没有类型的属性作为返回值怎么定义?

问题描述 link中new出来的,没有类型的属性作为返回值怎么定义? link中new出来的,没有类型的属性作为返回值怎么定义? 解决方案 只能用object,接受者用dynamic

c++-C++里的函数重载应该只是参数不同对吧。那么不同类型的等号重载返回值不是不一样吗?

问题描述 C++里的函数重载应该只是参数不同对吧.那么不同类型的等号重载返回值不是不一样吗? C++里的函数重载应该只是参数不同对吧.那么不同类型的等号重载返回值不是不一样吗? 解决方案 参数类型不同的函数重载(C++)C++与C语言不同之四--函数重载 解决方案二: c++的函数重载要求函数名相同,形参类型不同或形参个数不同,对返回值没有要求. 虚函数重载要求函数名.形参个数.类型必须相同,这样才能通过基类指针实现多态性.

xcode-c语言关于结构体类型的函数的返回值return

问题描述 c语言关于结构体类型的函数的返回值return 定义了一个全局变量的结构体,然后又定义了一个结构体类型的函数,函数的返回值如何返回一个空值,显然return 0;是不行的 解决方案 1)可以用结构体指针,因为指针的null是一个典型的"空",相对于int的0更能体现"空值"的含义,也最方便 2)结构体属于你自己定义的变量,所以你也可以规定当这个结构体里面的变量的值是某种情况是,认为这个结构体类型的变量是"空",比如一般意义上的int认为