概述

Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的。也就是说实体类都要自己写。它没有复杂的配置文件,一个单文件就可以了。

现在已经取代了原来的SqlHelper优点:

  • 使用Dapper可以自动进行对象映射!
  • 轻量级,单文件。
  • 支持多数据库。
  • Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象
  • 由于Dapper ORM的操作实际上是对IDbConnection类的扩展,所有的方法都是该类的扩展方法。所以在使用前先实例化一个IDBConnection对象。所以调用之前,一定先加上命名空间:using Dapper;
  • Nuget查询Dapper,点击安装即可引入第三方DLL

使用举例

数据库表结构

  1. ----Book表,主表
    CREATE TABLE [dbo].[Book](
  2. [BookId] [int] IDENTITY(,) NOT NULL,
  3. [Name] [nvarchar]() NOT NULL,
  4. CONSTRAINT [PK_Book] PRIMARY KEY CLUSTERED
  5. (
  6. [BookId] ASC
  7. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  8. ) ON [PRIMARY]
  9.  
  10. GO
  11. ----BookReview类似于book评价表
  12. CREATE TABLE [dbo].[BookReview](
  13. [Id] [int] IDENTITY(,) NOT NULL,
  14. [BookId] [int] NULL,
  15. [Content] [nvarchar]() NULL,
  16. CONSTRAINT [PK_BookReview] PRIMARY KEY CLUSTERED
  17. (
  18. [Id] ASC
  19. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  20. ) ON [PRIMARY]
  21.  
  22. GO
  23.  
  24. ALTER TABLE [dbo].[BookReview] WITH CHECK ADD CONSTRAINT [FK_BookID_BookPreBookid] FOREIGN KEY([BookId])
  25. REFERENCES [dbo].[Book] ([BookId])
  26. GO
  27.  
  28. ALTER TABLE [dbo].[BookReview] CHECK CONSTRAINT [FK_BookID_BookPreBookid]
  29. GO

实体结构

  1. public class Book
  2. {
  3. public Book()
  4. {
  5. Reviews = new List<BookReview>();
  6. }
  7. public int BookId { get; set; }
  8. public string Name { get; set; }
  9. public virtual List<BookReview> Reviews { get; set; }
  10. public override string ToString()
  11. {
  12. return string.Format("[{0}]------《{1}》", BookId, Name);
  13. }
  14. }
  15.  
  16. //书评
  17. public class BookReview
  18. {
  19. public int Id { get; set; }
  20. public int BookId { get; set; }
  21. public virtual string Content { get; set; }
  22. public virtual Book AssoicationWithBook { get; set; }
  23. public override string ToString()
  24. {
  25. return string.Format("{0})--[{1}]\t\"{3}\"", Id, BookId, Content);
  26. }
  27. }

Execute执行数据库脚本

  1. public static void OpeartData()
  2. {
  3. string sqlconnct = System.Configuration.ConfigurationManager.ConnectionStrings["myconnect"].ConnectionString;
  4. using (IDbConnection comm = new SqlConnection(sqlconnct))
  5. {
  6. comm.Open();
  7. //Book book = new Book() { Name="C#9论述",Id=1 };
  8. string query = "insert into Book(Name) values(@name)";
  9. //添加,可以执行SQL脚本
  10.  
  11. //comm.Execute(query, book);
  12. //comm.Execute(query, new { name = "Java Learn" });
  13.  
  14. query = "UPDATE Book SET Name=@name WHERE BookId =@id";
  15. //comm.Execute(query, book);
  16. //comm.Execute(query, new {name="C985426",BookId=1 });
  17.  
  18. query = "DELETE FROM Book WHERE BookId = @id";
  19. //var idsult=comm.Execute(query, new { name = "C985426", BookId = 1 });
  20.  
  21. query = "select * from Book where BookId=@id";
  22. //var ruslt = comm.Query<Book>(query).ToList();
  23. // var ruslt = comm.Query<Book>(query, new { BookId = 2 }).FirstOrDefault();
  24. }
  25. }

Query执行数据库脚本查询

  • One To More 查询
  1. public static Book OpeartMoData()
  2. {
  3. string sqlconnct = System.Configuration.ConfigurationManager.ConnectionStrings["myconnect"].ConnectionString;
  4. using (IDbConnection conn = new SqlConnection(sqlconnct))
  5. {
  6. conn.Open();
  7. string query = "SELECT * FROM Book b LEFT JOIN BookReview br ON br.BookId = b.Id WHERE b.id = @id";
  8. Book lookup = null;
  9. //Query<TFirst, TSecond, TReturn>
  10. var b = conn.Query<Book, BookReview, Book>(query,
  11. (book, bookReview) =>
  12. {
  13. //扫描第一条记录,判断非空和非重复
  14. if (lookup == null || lookup.BookId != book.BookId)
  15. lookup = book;
  16. //书对应的书评非空,加入当前书的书评List中,最后把重复的书去掉。
  17. if (bookReview != null)
  18. lookup.Reviews.Add(bookReview);
  19. return lookup;
  20. }, new { id = }, splitOn: "id").Distinct().SingleOrDefault();
  21. return b;
  22. }
  23. }
  • One To One 查询
  1. public static BookReview OpeartData1T1()
  2. {
  3. string sqlconnct = System.Configuration.ConfigurationManager.ConnectionStrings["myconnect"].ConnectionString;
  4. using (IDbConnection conn = new SqlConnection(sqlconnct))
  5. {
  6. BookReview br;
  7. string query = "SELECT br.Id,b.BookId,Content,Name FROM BookReview br inner JOIN Book b ON br.BookId = b.BookId WHERE br.id = @id";
  8. using (conn)
  9. {
  10. br = conn.Query<BookReview, Book, BookReview>(query,
  11. (bookReview, book) =>
  12. {
  13. bookReview.AssoicationWithBook = book;
  14. return bookReview;
  15. }, new { id = }, splitOn: "BookId",commandType:CommandType.StoredProcedure).FirstOrDefault();
  16. return br;
  17. }
  18. }
  19. }
  • 执行事务
  1. public static void BookTransaction()
  2. {
  3. string sqlconnct = System.Configuration.ConfigurationManager.ConnectionStrings["myconnect"].ConnectionString;
  4. using (IDbConnection conn = new SqlConnection(sqlconnct))
  5. {
  6. conn.Open();
  7. //开始事务
  8. IDbTransaction transaction = conn.BeginTransaction();
  9. try
  10. {
  11. string query = "DELETE FROM Book WHERE id = @id";
  12. string query2 = "DELETE FROM BookReview WHERE BookId = @BookId";
  13. conn.Execute(query2, new { BookId = }, transaction, null, null);
  14. conn.Execute(query, new { id = }, transaction, null, null);
  15. //提交事务
  16. transaction.Commit();
  17. }
  18. catch (Exception ex)
  19. {
  20. //出现异常,事务Rollback
  21. transaction.Rollback();
  22. throw new Exception(ex.Message);
  23. }
  24. }
  25. }

Dapper.NET 连接MySQL数据库

1、通过NuGet引用MySql数据库的客户端MySql.Data

2、配置引用客户端Config文件 

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <configuration>
  3. <appSettings>
  4. <add key="MySqlConnect" value="server=serviceip;Port=3306;User Id=root;password=avc123;Database=testdb;CharSet=utf8;"/>
  5. </appSettings>
  6. <system.data>
  7. <DbProviderFactories>
  8. <remove invariant="MySql.Data.MySqlClient" />
  9. <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
  10. </DbProviderFactories>
  11. </system.data>
  12. </configuration>

3、添加编写程序代码调用

  1. /// <summary>
  2. /// 执行返回第一行第一列值
  3. /// </summary>
  4. /// <typeparam name="T"></typeparam>
  5. /// <param name="sqlContent"></param>
  6. /// <returns></returns>
  7. public T ExecScalarSql<T>(string sqlContent)
  8. {
  9. try
  10. {
  11. using (var conn = new MySqlConnection(SqlConnect))
  12. {
  13. var resutl = conn.ExecuteScalar<T>(sqlContent);
  14. conn.Close();
  15. return resutl;
  16. }
  17. }
  18. catch (Exception ex)
  19. {
  20. throw ex;
  21. }
  22. }

Dapper.NET 使用简单举例的更多相关文章

  1. [转]bootstrapTable refresh 方法使用简单举例

    原文地址:https://blog.csdn.net/lanyang123456/article/details/55805478 本文就bootstrapTable refresh 方法如何传递参数 ...

  2. bootstrapTable refresh 方法使用简单举例

    本文就bootstrapTable refresh 方法如何传递参数做简单举例说明. 下面代码中,一个table,一个button,单击button会触发刷新表格操作. <!DOCTYPE ht ...

  3. 使用postgre数据库实现树形结构表的子-父级迭代查询,通过级联菜单简单举例

    前言:开发常用的关系型数据库MySQL,mssql,postgre,Oracle,简单的增删改查的SQL语句都与标准SQL兼容,这个不用讲,那么对于迭代查询(不严格的叫法:递归查询)每种数据库都不一样 ...

  4. shell-script的简单举例

    #!/bin/bash #defind the path PATH=/usr/local export PATH read -p "please input your first name: ...

  5. SQL Server中带事务的存储过程简单举例

    先来看一个概念: 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全地不执行.那么在存储过程里添加事务,则可以保证该事务里的所 ...

  6. 使用Oracle数据库实现树形结构表的子-父级递归查询和删除,通过级联菜单简单举例

    前言: 我们在开发中,常常遇到单表的子-父id级联的表结构,在树形的深度不确定的情况下,一次查询出某个树形结构下的所有具有子-父级关系的数据变得十分困难. 这时,我们使用oracle提供的CONNEC ...

  7. 最新版本express 4.2.0的快速建站--简单举例

    express是Node.js的官方唯一推荐的框架,它扩展了http工具以及一些好用的功能.如此好用的东西,赶紧的安装起来: npm install express -g 新版本的express的命令 ...

  8. 使用Oracle数据库实现树形结构表的子-父级迭代(递归)查询和删除,通过级联菜单简单举例

    前言: 我们在开发中,常常遇到单表的子-父id级联的表结构,在树形的深度不确定的情况下,一次查询出某个树形结构下的所有具有子-父级关系的数据变得十分困难. 这时,我们使用oracle提供的CONNEC ...

  9. Spring Security之简单举例

    核心功能 Spring Security提供了三个核心的功能: 认证(你是谁) 授权(你能干什么) 攻击防护(防止伪造身份) 一个简单例子 默认情况 在前面的开发中,都是将spring securit ...

随机推荐

  1. BZOJ 1044: [HAOI2008]木棍分割

    Description 求 \(n\) 根木棍长度为 \(L\) ,分成 \(m\) 份,使最长长度最短,并求出方案数. Sol 二分+DP. 二分很简单啊,然后就是方案数的求法. 状态就是 \(f[ ...

  2. ModelAndView的介绍

    ModelAndView的构造方法有7个.但是它们都是相通的.这里使用无参构造函数来举例说明如何构造ModelAndView实例. ModelAndView类别就如其名称所示,是代表了MVC Web程 ...

  3. PyQt4自定义事件

    listview控件与updateText 相关联 self.listview.updateText.connect(self.viewlist)   updateText = QtCore.pyqt ...

  4. LUA+resty 搭建验证码服务器

    使用Lua和OpenResty搭建验证码服务器 雨客 2016-04-08 16:38:11 浏览2525 评论0 云数据库Redis版 摘要: Lua下有个Lua-GD图形库,通过简单的Lua语句就 ...

  5. PHP 常量

    1.__NAMESPACE__           http://php.net/manual/zh/language.namespaces.nsconstants.php

  6. PHP设定错误和异常处理三函数

    register_shutdown_function(array('Debug','fatalError')); //定义PHP程序执行完成后执行的函数 set_error_handler(array ...

  7. When building php 5.3, if you get the following error:

    buildconf: You need autoconf 2.59 or lower to build this version of PHP. You are currently trying to ...

  8. C# 数组、多维数组(矩形数组)、锯齿数组(交叉数组)

    数组是变量的索引列表,可以在方括号中指定索引来访问数组中的各个成员,其中索引是一个整数,从0开始. 一维数组 多维数组(矩形数组) 数组的数组(锯齿数组) 数组必须在访问之前初始化,数组的初始化有两种 ...

  9. POJ 3322(广搜)

    ---恢复内容开始--- http://poj.org/problem?id=3322 题意:http://jandan.net/2008/01/24/bloxorz.html就是这个鬼游戏 我也是郁 ...

  10. Appium+Robotframework实现Android应用的自动化测试-7:模拟器频繁挂掉的解决方案

    如果测试用例比较多,则当持续运行多个测试用例后,经常会出现模拟器崩溃或者Appium无法连接到该模拟器的情况出现. 经过分析,本人认为这应该是模拟器或者Appium的缺陷造成的,目前并没有直接的解决方 ...