ASP .Net Core 使用 Dapper 轻型ORM框架
一:优势
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框架的更多相关文章
- ASP.NET Core API ——Dapper的使用
ASP.NET Core API ——Dapper的使用 简介:Dapper是一个ORM框架,负责数据库和程序语言之间的映射. 使用步骤: l 创建一个IDBConnection的接口对象 l 编 ...
- ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...
- 视频教程--ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
说好的给园子里的朋友们录制与<ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库> 这篇博客相对应的视频,由于一个月一来没有时 ...
- Orchard Core Framework:ASP.NET Core 模块化,多租户框架
Orchard Core Framework:ASP.NET Core 模块化,多租户框架 上一篇编写Orchard Core一分钟搭建ASP.NET Core CMS ,介绍ASP.NET Core ...
- Asp.net Core 系列之--2.ORM初探:Dapper实现MySql数据库各类操作
ChuanGoing 2019-09-10 距离上一篇近一个月时间,断断续续才把本篇码完,后面将加快进度,争取年度内把本系列基本介绍完成,同时督促本人持续学习. 本篇学习曲线: 1.初识Dapper ...
- ASP.NET Core微服务+Tabler前端框架搭建个人博客1--开始前想说的话
写在前面 本人为在读研究生,特别喜欢.NET,觉得.NET的编程方式.语法都特别友好,学习.NET Core已经差不多有一年半了,从一开始不知道如何入门到现在终于可以编写一些小的应用程序,想一想还是非 ...
- C#轻型ORM框架PetaPoco试水
近端时间从推酷app上了解到C#轻微型的ORM框架--PetaPoco.从github Dapper 开源项目可以看到PetaPoco排第四 以下是网友根据官方介绍翻译,这里贴出来. PetaPoco ...
- 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 ...
- ASP.NET Core微服务+Tabler前端框架搭建个人博客2--系统架构
功能分析 在整个微服务架构的搭建过程中,我们需要做的第一步就是对服务进行拆分,将一个完整的系统模块化,通过对各个模块互联,共同完成一个系统的工作.既然要做到模块化,那么必须明白你的系统的需求到底是什么 ...
随机推荐
- Oracle 11g完全卸载(Windows)(转)
Oracle 11g完全卸载(Windows) 1.关闭oracle所有的服务.可以在windows的服务管理器中关闭: 一般有以下服务: (1)Oracle SID VSS Writer ...
- Python爬虫实战(4):豆瓣小组话题数据采集—动态网页
1, 引言 注释:上一篇<Python爬虫实战(3):安居客房产经纪人信息采集>,访问的网页是静态网页,有朋友模仿那个实战来采集动态加载豆瓣小组的网页,结果不成功.本篇是针对动态网页的数据 ...
- 期末考试--nyoj-757
期末考试 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 马上就要考试了,小T有许多作业要做,而且每个老师都给出来了作业要交的期限,如果在规定的期限内没 交作业就会扣期末 ...
- KNN(k-nearest neighbor的缩写)又叫最近邻算法
KNN(k-nearest neighbor的缩写)又叫最近邻算法 机器学习笔记--KNN算法1 前言 Hello ,everyone. 我是小花.大四毕业,留在学校有点事情,就在这里和大家吹吹我们的 ...
- MYSQL 加密的 3 类方法
背景: 若你想要储存一些由可能包含任意字节值的加密函数返回的结果,使用BLOB列而不是 CHAR 或VARCHAR 列,从而避免由于结尾空格的删除而改变一些数据值的潜在问题. 这一句话来自官方文件,记 ...
- NFC-P2P MODE
今日看见有关国内电信业者要合组TSM (Trusted Service Manager)提供NFC 服务的新闻, 这是属于NFC 所能提供的3种Mode中的Card emulation mode (就 ...
- linux scp ssh命令不用输入密码
把你的本地主机用户的ssh公匙文件复制到远程主机用户的~/.ssh/authorized_keys文件中 假设本地主机linux100,远程主机linux200 一,在linux100主机里的用户 运 ...
- 77个常用Linux命令和工具
77个常用Linux命令和工具 Linux管理员不能单靠GUI图形界面吃饭.这就是我们编辑这篇最实用Linux命令手册的原因.这个指南是特别为Linux管理员和系统管理员 设计的,汇集了最有用的一些工 ...
- C语言的本质(19)——预处理之一:宏定义
我们在写代码时已多次使用过以"#"号开头的预处理命令.如包含命令#include,宏定义命令#define等.在源程序中这些命令都放在函数之外,而且一般都放在源文件的前面,它们称为 ...
- wordpress参考网站
wordpress大学http://www.wpdaxue.com/post-tags-and-categories-for-pages.html