一:优势

1,Dapper是一个轻型的ORM类。代码就一个SqlMapper.cs文件,编译后就40K的一个很小的Dll.

2,Dapper很快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。

3,Dapper支持什么数据库。Dapper支持Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的数据库,当然如果你知道原理也可以让它支持Mongo db

4,Dapper的r支持多表并联的对象。支持一对多 多对多的关系。并且没侵入性,想用就用,不想用就不用。无XML无属性。代码以前怎么写现在还怎么写。 5,Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象。性能实在高高高。

6,Dapper支持net2.0,3.0,3.5,4.0。【如果想在Net2.0下使用,可以去网上找一下Net2.0下如何配置运行Net3.5即可。】 7,Dapper语法十分简单。并且无须迁就数据库的设计。

二:ASP .Net Core 中使用dapper可以很方便的操作mysql数据

需要安装如下类库
"Dapper": "1.50.2",
"NETStandard.Library": "1.6.0",
"SapientGuardian.MySql.Data": "6.9.813"

三:基于dapper的操作mysql的封装类

    /// <summary>
///作者: 逍遥帝君
/// 2016-10-26
/// </summary>
public class DapperMySQLHelp
{ #region +ExcuteNonQuery 增、删、改同步操作
/// <summary>
/// 增、删、改同步操作
/// 作者: 逍遥帝君
/// 2016-10-26
/// </summary>
/// <typeparam name="T">实体</typeparam>
/// <param name="connection">链接字符串</param>
/// <param name="cmd">sql语句</param>
/// <param name="param">参数</param>
/// <param name="flag">true存储过程,false sql语句</param>
/// <returns>int</returns>
public int ExcuteNonQuery<T>(string connection, string cmd, DynamicParameters param, bool flag = true) where T : class, new()
{
int result = ;
using (MySqlConnection con = new MySqlConnection(connection))
{
if (flag)
{
result = con.Execute(cmd, param, null, null, CommandType.StoredProcedure);
}
else
{
result = con.Execute(cmd, param, null, null, CommandType.Text);
}
}
return result;
}
#endregion #region +ExcuteNonQueryAsync 增、删、改异步操作
/// <summary>
/// 增、删、改异步操作
/// 作者: 逍遥帝君
/// 2016-10-26
/// </summary>
/// <typeparam name="T">实体</typeparam>
/// <param name="connection">链接字符串</param>
/// <param name="cmd">sql语句</param>
/// <param name="param">参数</param>
/// <param name="flag">true存储过程,false sql语句</param>
/// <returns>int</returns>
public async Task<int> ExcuteNonQueryAsync<T>(string connection, string cmd, DynamicParameters param, bool flag = true) where T : class, new()
{
int result = ;
using (MySqlConnection con = new MySqlConnection(connection))
{
if (flag)
{
result = await con.ExecuteAsync(cmd, param, null, null, CommandType.StoredProcedure);
}
else
{
result = await con.ExecuteAsync(cmd, param, null, null, CommandType.Text);
}
}
return result;
}
#endregion #region +ExecuteScalar 同步查询操作
/// <summary>
/// 同步查询操作
/// 作者: 逍遥帝君
/// 2016-10-26
/// </summary>
/// <typeparam name="T">实体</typeparam>
/// <param name="connection">连接字符串</param>
/// <param name="cmd">sql语句</param>
/// <param name="param">参数</param>
/// <param name="flag">true存储过程,false sql语句</param>
/// <returns>object</returns>
public object ExecuteScalar<T>(string connection, string cmd, DynamicParameters param, bool flag = true) where T : class, new()
{
object result = null;
using (MySqlConnection con = new MySqlConnection(connection))
{
if (flag)
{
result = con.ExecuteScalar(cmd, param, null, null, CommandType.StoredProcedure);
}
else
{
result = con.ExecuteScalar(cmd, param, null, null, CommandType.Text);
}
}
return result;
}
#endregion #region +ExecuteScalarAsync 异步查询操作
/// <summary>
/// 异步查询操作
/// 作者: 逍遥帝君
/// 2016-10-26
/// </summary>
/// <typeparam name="T">实体</typeparam>
/// <param name="connection">连接字符串</param>
/// <param name="cmd">sql语句</param>
/// <param name="param">参数</param>
/// <param name="flag">true存储过程,false sql语句</param>
/// <returns>object</returns>
public async Task<object> ExecuteScalarAsync<T>(string connection, string cmd, DynamicParameters param, bool flag = true) where T : class, new()
{
object result = null;
using (MySqlConnection con = new MySqlConnection(connection))
{
if (flag)
{
result = await con.ExecuteScalarAsync(cmd, param, null, null, CommandType.StoredProcedure);
}
else
{
result = con.ExecuteScalarAsync(cmd, param, null, null, CommandType.Text);
}
}
return result;
}
#endregion #region +FindOne 同步查询一条数据
/// <summary>
/// 同步查询一条数据
/// 作者: 逍遥帝君
/// 2016-10-26
/// </summary>
/// <typeparam name="T">实体</typeparam>
/// <param name="connection">连接字符串</param>
/// <param name="cmd">sql语句</param>
/// <param name="param">参数</param>
/// <param name="flag">true存储过程,false sql语句</param>
/// <returns>t</returns>
public T FindOne<T>(string connection, string cmd, DynamicParameters param, bool flag = true) where T : class, new()
{
IDataReader dataReader = null;
using (MySqlConnection con = new MySqlConnection(connection))
{
if (flag)
{
dataReader = con.ExecuteReader(cmd, param, null, null, CommandType.StoredProcedure);
}
else
{
dataReader = con.ExecuteReader(cmd, param, null, null, CommandType.Text);
}
if (dataReader == null || !dataReader.Read()) return null;
Type type = typeof(T);
T t = new T();
foreach (var item in type.GetProperties())
{
for (int i = ; i < dataReader.FieldCount; i++)
{
//属性名与查询出来的列名比较
if (item.Name.ToLower() != dataReader.GetName(i).ToLower()) continue;
var kvalue = dataReader[item.Name];
if (kvalue == DBNull.Value) continue;
item.SetValue(t, kvalue, null);
break;
}
}
return t;
}
}
#endregion #region +FindOne 异步查询一条数据
/// <summary>
/// 异步查询一条数据
/// 作者: 逍遥帝君
/// 2016-10-26
/// </summary>
/// <typeparam name="T">实体</typeparam>
/// <param name="connection">连接字符串</param>
/// <param name="cmd">sql语句</param>
/// <param name="param">参数</param>
/// <param name="flag">true存储过程,false sql语句</param>
/// <returns>t</returns>
public async Task<T> FindOneAsync<T>(string connection, string cmd, DynamicParameters param, bool flag = true) where T : class, new()
{
IDataReader dataReader = null;
using (MySqlConnection con = new MySqlConnection(connection))
{
if (flag)
{
dataReader = await con.ExecuteReaderAsync(cmd, param, null, null, CommandType.StoredProcedure);
}
else
{
dataReader = await con.ExecuteReaderAsync(cmd, param, null, null, CommandType.Text);
}
if (dataReader == null || !dataReader.Read()) return null;
Type type = typeof(T);
T t = new T();
foreach (var item in type.GetProperties())
{
for (int i = ; i < dataReader.FieldCount; i++)
{
//属性名与查询出来的列名比较
if (item.Name.ToLower() != dataReader.GetName(i).ToLower()) continue;
var kvalue = dataReader[item.Name];
if (kvalue == DBNull.Value) continue;
item.SetValue(t, kvalue, null);
break;
}
}
return t;
}
}
#endregion #region +FindToList 同步查询数据集合
/// <summary>
/// 同步查询数据集合
/// 作者: 逍遥帝君
/// 2016-10-26
/// </summary>
/// <typeparam name="T">实体</typeparam>
/// <param name="connection">连接字符串</param>
/// <param name="cmd">sql语句</param>
/// <param name="param">参数</param>
/// <param name="flag">true存储过程,false sql语句</param>
/// <returns>t</returns>
public IList<T> FindToList<T>(string connection, string cmd, DynamicParameters param, bool flag = true) where T : class, new()
{
IDataReader dataReader = null;
using (MySqlConnection con = new MySqlConnection(connection))
{
if (flag)
{
dataReader = con.ExecuteReader(cmd, param, null, null, CommandType.StoredProcedure);
}
else
{
dataReader = con.ExecuteReader(cmd, param, null, null, CommandType.Text);
}
if (dataReader == null || !dataReader.Read()) return null;
Type type = typeof(T);
List<T> tlist = new List<T>();
while (dataReader.Read())
{
T t = new T();
foreach (var item in type.GetProperties())
{
for (int i = ; i < dataReader.FieldCount; i++)
{
//属性名与查询出来的列名比较
if (item.Name.ToLower() != dataReader.GetName(i).ToLower()) continue;
var kvalue = dataReader[item.Name];
if (kvalue == DBNull.Value) continue;
item.SetValue(t, kvalue, null);
break;
}
}
if (tlist != null) tlist.Add(t);
}
return tlist;
}
}
#endregion #region +FindToListAsync 异步查询数据集合
/// <summary>
/// 异步查询数据集合
/// 作者: 逍遥帝君
/// 2016-10-26
/// </summary>
/// <typeparam name="T">实体</typeparam>
/// <param name="connection">连接字符串</param>
/// <param name="cmd">sql语句</param>
/// <param name="param">参数</param>
/// <param name="flag">true存储过程,false sql语句</param>
/// <returns>t</returns>
public async Task<IList<T>> FindToListAsync<T>(string connection, string cmd, DynamicParameters param, bool flag = true) where T : class, new()
{
IDataReader dataReader = null;
using (MySqlConnection con = new MySqlConnection(connection))
{
if (flag)
{
dataReader = await con.ExecuteReaderAsync(cmd, param, null, null, CommandType.StoredProcedure);
}
else
{
dataReader = await con.ExecuteReaderAsync(cmd, param, null, null, CommandType.Text);
}
if (dataReader == null || !dataReader.Read()) return null;
Type type = typeof(T);
List<T> tlist = new List<T>();
while (dataReader.Read())
{
T t = new T();
foreach (var item in type.GetProperties())
{
for (int i = ; i < dataReader.FieldCount; i++)
{
//属性名与查询出来的列名比较
if (item.Name.ToLower() != dataReader.GetName(i).ToLower()) continue;
var kvalue = dataReader[item.Name];
if (kvalue == DBNull.Value) continue;
item.SetValue(t, kvalue, null);
break;
}
}
if (tlist != null) tlist.Add(t);
}
return tlist;
}
}
#endregion #region +FindToList 同步查询数据集合
/// <summary>
/// 同步查询数据集合
/// 作者: 逍遥帝君
/// 2016-10-26
/// </summary>
/// <typeparam name="T">实体</typeparam>
/// <param name="connection">连接字符串</param>
/// <param name="cmd">sql语句</param>
/// <param name="param">参数</param>
/// <param name="flag">true存储过程,false sql语句</param>
/// <returns>t</returns>
public IList<T> FindToListAsPage<T>(string connection, string cmd, DynamicParameters param, bool flag = true) where T : class, new()
{
IDataReader dataReader = null;
using (MySqlConnection con = new MySqlConnection(connection))
{
if (flag)
{
dataReader = con.ExecuteReader(cmd, param, null, null, CommandType.StoredProcedure);
}
else
{
dataReader = con.ExecuteReader(cmd, param, null, null, CommandType.Text);
}
if (dataReader == null || !dataReader.Read()) return null;
Type type = typeof(T);
List<T> tlist = new List<T>();
while (dataReader.Read())
{
T t = new T();
foreach (var item in type.GetProperties())
{
for (int i = ; i < dataReader.FieldCount; i++)
{
//属性名与查询出来的列名比较
if (item.Name.ToLower() != dataReader.GetName(i).ToLower()) continue;
var kvalue = dataReader[item.Name];
if (kvalue == DBNull.Value) continue;
item.SetValue(t, kvalue, null);
break;
}
}
if (tlist != null) tlist.Add(t);
}
return tlist;
}
}
#endregion #region +FindToListByPage 同步分页查询数据集合
/// <summary>
/// 同步分页查询数据集合
/// 作者: 逍遥帝君
/// 2016-10-26
/// </summary>
/// <typeparam name="T">实体</typeparam>
/// <param name="connection">连接字符串</param>
/// <param name="cmd">sql语句</param>
/// <param name="param">参数</param>
/// <param name="flag">true存储过程,false sql语句</param>
/// <returns>t</returns>
public IList<T> FindToListByPage<T>(string connection, string cmd, DynamicParameters param, bool flag = true) where T : class, new()
{
IDataReader dataReader = null;
using (MySqlConnection con = new MySqlConnection(connection))
{
if (flag)
{
dataReader = con.ExecuteReader(cmd, param, null, null, CommandType.StoredProcedure);
}
else
{
dataReader = con.ExecuteReader(cmd, param, null, null, CommandType.Text);
}
if (dataReader == null || !dataReader.Read()) return null;
Type type = typeof(T);
List<T> tlist = new List<T>();
while (dataReader.Read())
{
T t = new T();
foreach (var item in type.GetProperties())
{
for (int i = ; i < dataReader.FieldCount; i++)
{
//属性名与查询出来的列名比较
if (item.Name.ToLower() != dataReader.GetName(i).ToLower()) continue;
var kvalue = dataReader[item.Name];
if (kvalue == DBNull.Value) continue;
item.SetValue(t, kvalue, null);
break;
}
}
if (tlist != null) tlist.Add(t);
}
return tlist;
}
}
#endregion #region +FindToListByPageAsync 异步分页查询数据集合
/// <summary>
/// 异步分页查询数据集合
/// 作者: 逍遥帝君
/// 2016-10-26
/// </summary>
/// <typeparam name="T">实体</typeparam>
/// <param name="connection">连接字符串</param>
/// <param name="cmd">sql语句</param>
/// <param name="param">参数</param>
/// <param name="flag">true存储过程,false sql语句</param>
/// <returns>t</returns>
public async Task<IList<T>> FindToListByPageAsync<T>(string connection, string cmd, DynamicParameters param, bool flag = true) where T : class, new()
{
IDataReader dataReader = null;
using (MySqlConnection con = new MySqlConnection(connection))
{
if (flag)
{
dataReader = await con.ExecuteReaderAsync(cmd, param, null, null, CommandType.StoredProcedure);
}
else
{
dataReader = await con.ExecuteReaderAsync(cmd, param, null, null, CommandType.Text);
}
if (dataReader == null || !dataReader.Read()) return null;
Type type = typeof(T);
List<T> tlist = new List<T>();
while (dataReader.Read())
{
T t = new T();
foreach (var item in type.GetProperties())
{
for (int i = ; i < dataReader.FieldCount; i++)
{
//属性名与查询出来的列名比较
if (item.Name.ToLower() != dataReader.GetName(i).ToLower()) continue;
var kvalue = dataReader[item.Name];
if (kvalue == DBNull.Value) continue;
item.SetValue(t, kvalue, null);
break;
}
}
if (tlist != null) tlist.Add(t);
}
return tlist;
}
}
#endregion }

四:分页查询存储过程

存储过程
CREATE PROCEDURE page_getperson

_pageIndex INT,
_pageSize INT,
out _pagecount int

BEGIN
DECLARE startIndex int DEFAULT ;
DECLARE tcount int DEFAULT ;
set startIndex=(_pageIndex-)*_pageSize;
SELECT * from Person LIMIT startIndex,_pageSize;
SELECT COUNT(id) into tcount from Person;
set _pagecount=tcount; END

五:参数写法

 DynamicParameters param = new DynamicParameters();
param.Add("_pageIndex", );
param.Add("_pageSize", );
param.Add("_pagecount", dbType: DbType.Int32, direction: ParameterDirection.Output);
var result = mysql.FindToListByPage<Person>(connection, "page_getperson", param);
//总条数
var count = param.Get<int>("_pagecount");
var kk = result;

ASP .Net Core 使用 Dapper 轻型ORM框架的更多相关文章

  1. ASP.NET Core API ——Dapper的使用

    ASP.NET Core API ——Dapper的使用 简介:Dapper是一个ORM框架,负责数据库和程序语言之间的映射. 使用步骤: l  创建一个IDBConnection的接口对象 l  编 ...

  2. ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...

  3. 视频教程--ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    说好的给园子里的朋友们录制与<ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库> 这篇博客相对应的视频,由于一个月一来没有时 ...

  4. Orchard Core Framework:ASP.NET Core 模块化,多租户框架

    Orchard Core Framework:ASP.NET Core 模块化,多租户框架 上一篇编写Orchard Core一分钟搭建ASP.NET Core CMS ,介绍ASP.NET Core ...

  5. Asp.net Core 系列之--2.ORM初探:Dapper实现MySql数据库各类操作

    ChuanGoing 2019-09-10 距离上一篇近一个月时间,断断续续才把本篇码完,后面将加快进度,争取年度内把本系列基本介绍完成,同时督促本人持续学习. 本篇学习曲线: 1.初识Dapper ...

  6. ASP.NET Core微服务+Tabler前端框架搭建个人博客1--开始前想说的话

    写在前面 本人为在读研究生,特别喜欢.NET,觉得.NET的编程方式.语法都特别友好,学习.NET Core已经差不多有一年半了,从一开始不知道如何入门到现在终于可以编写一些小的应用程序,想一想还是非 ...

  7. C#轻型ORM框架PetaPoco试水

    近端时间从推酷app上了解到C#轻微型的ORM框架--PetaPoco.从github Dapper 开源项目可以看到PetaPoco排第四 以下是网友根据官方介绍翻译,这里贴出来. PetaPoco ...

  8. Asp.net Core 3.1 引用ORM工具包 yrjw.ORM.Chimp(EF + dapper + Autofac)使用教程

    yrjw.ORM.Chimp 介绍 It is not the encapsulation of ORM,a based on EF + dapper + Autofac, is repository ...

  9. ASP.NET Core微服务+Tabler前端框架搭建个人博客2--系统架构

    功能分析 在整个微服务架构的搭建过程中,我们需要做的第一步就是对服务进行拆分,将一个完整的系统模块化,通过对各个模块互联,共同完成一个系统的工作.既然要做到模块化,那么必须明白你的系统的需求到底是什么 ...

随机推荐

  1. PHP学习笔记八【数组】

    <?php //定义数组 $hens[0]=3; $hens[1]=5; $hens[2]=1; $hens[3]=3.4; $hens[4]=2; $hens[5]=50; //遍历整个数组 ...

  2. Sql Server trace flags

    Tace flag number Description -T1205 每次deadlock算法运行时,都收集相关的信息 -T1204 当deadlock算法发现死锁时才收集相关信息 -T3604 把 ...

  3. 记微信开发(自定义回复&关注回复)

    记微信开发(自定义回复&关注回复) 记微信开发(自定义回复&关注回复) code: <?php/** * wechat php test *///define your toke ...

  4. 关于meta定义 和 link

    <!DOCTYPE html> <!-- HTML5 doctype 不区分大小写 --> <html lang="zh-cmn-Hans-CN"&g ...

  5. Seeding--zoj2100

    Seeding Time Limit: 2 Seconds      Memory Limit: 65536 KB It is spring time and farmers have to plan ...

  6. C语言学习second--C语言基础学习

    1.标准C语言 C语言诞生于20世纪70年代,年龄比我们自己还要大,期间产生了很多标准,但是各种编译器对标准的支持不尽相同. ANSI C是使用的最广泛的一个标准,也是第一个正式标准,被称为“标准C语 ...

  7. SQL Server 无法启动的 4 种原因

    SQL Server 无法启动的原因定位.首先要知道SQL Server 启动的过程. 第一步: 读取注册表,创建log文件.检测硬件.初始化系统配置. 第二步: 启动系统数据库. 第三步: 准备好网 ...

  8. 算法分析-插入排序INSERT_SORT与选择排序SELECT_SORT【线性方法】

    var A = [5, 2, 4, 6, 1, 3]; console.log("排序前-:") A.forEach(function (element, index, arr) ...

  9. 【写一个自己的js库】 4.完善跨浏览器事件操作

    1.阻止冒泡. function stopPropagation(event){ event = event || getEvent(event); if(event.stopPropagation) ...

  10. OpenStack IdentityService Keystone V3 API Curl实战

    v3 API Examples Using Curl <Tokens> 1,Default scope 获取token Get an token with default scope (m ...