.net Dapper 学习系列(1) ---Dapper入门
写在前面
Dapper 是一款轻量级ORM架构。为解决网站访问流量极高而产生的性能问题而构造,主要通过执行TSQL表达式而实现数据库的CQRS。
如果在项目中遇到性能访问问题,选择Dapper作为ORM框架可能是明智之举,当然也可以使用Entity Framework或NHibernate来处理大数据访问及关系映射。
为什么选择Dapper
1.轻量:只有一个文件夹(SqlMapper.cs),编译完成之后只有140K。
2.速度快:Dapper的速度接近于IDataReader,取列表的数据超过了DataTable。是公认速度第二快的小型ORM框架。
3.支持多种数据库:Dapper可以在所有Ado.Net Providers下工作,包括sqlLite、Oracle、MySQL、SQL Server。
4.可以映射一对一、一对多、多对多等各种关系。
5.性能高:通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。
在项目中安装Dapper
说了再多Dapper 如何好,如何快。都不如实践一番。接下来我们在项目中安装并使用Dapper。
第一步:打开 vs 2013 ,文件-->新建-->项目

然后,选择空的mvc模板。点击确定,创建一个mvc的项目。

第二步:工具-->nuGut程序包管理器-->程序包管理器控制台

第三步:输入 install-package Dapper, 回车。

额~发现在安装的过程中报错。错误如下:

分析错误原因是因为我们在安装Dapper的时候没有给指定的版本号,在安装的过程中会默认安装最新版本的Dapper。
所以,我们要降低Dapper 的版本号 可以在 程序包管理器控制台 install-package Dapper 命令后面加上版本号。
例如: PM> Install-Package Dapper -Version 1.50.2 回车即可。

在项目中使用Dapper
第1步:打开sqlserver2012数据库创建 DomeDb数据库,然后创建 用户表(sys_user)并插入基础数据。
//创建用户表
create table [sys_user]
(
[user_id] [uniqueidentifier] primary key default(newid()) not null,
[u_id] [nvarchar](20) null,
[u_password] [nchar](50) null,
[gender] [nchar](1) null,
[user_name] [nvarchar](50) null,
[creation_time] [datetime] default(getdate()) null,
[status] [nvarchar](1) null,
)
//插入测试数据
insert into [sys_user]([u_id],[u_password],[gender],[user_name],[status]) values('Admin','admin','m','创建管理员','y')
insert into [sys_user]([u_id],[u_password],[gender],[user_name],[status]) values('User','user','w','用户','y')
insert into [sys_user]([u_id],[u_password],[gender],[user_name],[status]) values('ZhangSan','zhangsan001','m','张三','y')
insert into [sys_user]([u_id],[u_password],[gender],[user_name],[status]) values('LiSi','LiSi001','m','李思','n')
//查询结果
select * from [sys_user]
结果如图:

第2步:打开Web.config 。编写连接字符串。
<connectionStrings>
<add name="lc" connectionString="server=.;uid=sa;pwd=123456;database=DemoDb;" providerName="System.Data.SqlClient" />
</connectionStrings>
第3步:新建空的控制器,命名HomeController。
声明静态的连接字符串,用来连接数据库。
private static string connstr_sqlserver = ConfigurationManager.ConnectionStrings["lc"].ToString();
第4步:在Model文件夹添加sys_user_sqlserver类。
public class sys_user_sqlserver
{
[DisplayName("用户主键")]
public Guid user_id { get; set; }
[DisplayName("登录名称")]
public string u_id { get; set; }
[DisplayName("登录密码")]
public string u_password { get; set; }
[DisplayName("性别")]
public string gender { get; set; }
[DisplayName("姓名")]
public string user_name { get; set; }
[DisplayName("创建时间")]
public string creation_time { get; set; }
[DisplayName("状态")]
public string status { get; set; }
}
第5步:编辑获取数据方法,结果返回Json对象。
[HttpGet]
public JsonResult Get_User_Sqlserver()
{
//1.使用IDbConnection打开连接
using (IDbConnection conn = new SqlConnection(connstr_sqlserver))
{
//2.查询sql
string sql_all = @"select * from [dbo].[sys_user]";
//3.这里可以有两种方式
//方式1:
List<sys_user_sqlserver> u = conn.Query<sys_user_sqlserver>(sql_all).ToList();
//方式2:
//<sys_user> u = SqlMapper.Query<sys_user>(conn, sql_all).ToList();
//4.返回Json对象
return Json(u, JsonRequestBehavior.AllowGet);
}
}
第6步:前台页面发起Get请求。
$.get("../Sqlserver/Get_User_Sqlserver", function (msg) { });
显示结果:

至此,我们从零开始完成了一个简单的Dapper的查询显示的实践例子。
在项目中使用Dapper 进行单表增删改数据操作
1.新增数据
后台
[HttpPost]
public int Add_User_SqlServer(sys_user_sqlserver sql_user)
{
int result = 0;
using (IDbConnection conn_sql = new SqlConnection(connstr_sqlserver))
{
string sql_add = @"insert into sys_user(user_id,u_id,u_password,gender,user_name,status)";
sql_add += " values (newid(),@u_id,@u_password,@gender,@user_name,@status)";
result = conn_sql.Execute(sql_add, sql_user);
}
return result;
}
前台
var add_data = { u_id: "user1", u_password: "user1", gender: "w", user_name: "用户1", status: "y" };
$.ajax({
url: "../Sqlserver/Add_User_SqlServer",
type: "post",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(add_data)
}).done(function (msg) { }).fail(function (e) { });
显示结果:
编辑前

编辑成功
成功返回1,失败返回0

编辑后

2.根据主键查询记录
后台:
[httpGet]
public JsonResult Query_User_SqlServer(string Id)
{
//1.连接Sqlserver 数据库
using (IDbConnection conn_sql = new SqlConnection(connstr_sqlserver))
{
//2.sql查询语句
string sql_query = @"select * from sys_user where user_id=@user_id";
//3.执行Dapper 中Query()方法查询SingleOrDefault() 数据
sys_user_sqlserver users = conn_sql.Query<sys_user_sqlserver>(sql_query, new { @user_id = Id }).SingleOrDefault();
//4.返回Json对象结果集
return Json(users, JsonRequestBehavior.AllowGet);
}
}
前台
$.get("../Sqlserver/Query_User_SqlServer", { id: "d8dae9bd-4664-4b1e-9f86-a4f77a2d316f" }, function (msg) { });
显示结果:

3.编辑数据
后台:
[HttpPost]
public int Edit_User_SqlServer(sys_user_sqlserver user)
{
//1.声明返回结果
int result = 0;
//2.连接mysql数据库
using (IDbConnection conn = new SqlConnection(connstr_sqlserver))
{
//3.编辑sql编辑语句
string sql_edit = @"update sys_user set u_id=@u_id,u_password=@u_password";
sql_edit += ",gender=@gender,user_name=@user_name,status=@status where user_id=@user_id";
//4.执行Dapper 里 Execute方法 实现编辑数据
result = conn.Execute(sql_edit, user);
}
//5.返回结果集
return result;
}
前台
var edit_data = { u_id: "user1", u_password: "user1", gender: "m", user_name: "用户1", status: "y", user_id: "d8dae9bd-4664-4b1e-9f86-a4f77a2d316f" };
$.ajax({
url: "../Sqlserver/Edit_User_SqlServer",
type: "post",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(edit_data)
}).done(function (msg) { }).fail(function (e) { });
显示结果:
编辑前

编译成功

编译后

3.删除数据
后台:
[HttpGet]
public int Del_User_Sqlserver(string Id)
{
//1.声明返回的结果
int result = 0;
//2.连接Mysql数据库
using (IDbConnection conn_sql = new SqlConnection(connstr_sqlserver))
{
//3.编辑删除sql语句
string sql_del = @"delete from sys_user where user_id=@user_id";
//4.执行Dapper 中 Execute 方法,实现删除数据操作
result = conn_sql.Execute(sql_del, new { @user_id = Id });
}
//5.返回执行结果
return result;
}
前台
$.get("../Sqlserver/Del_User_Sqlserver", { id: "E90915F7-5724-4735-8474-FD1E226B90D2" }, function (msg) { });
显示结果:
编辑前

编辑成功
删除成功返回1,删除失败返回0。

编辑后

总结
至此,学习并实践了使用Dapper对单表进行基本的数据操作。希望,能对自己同时也对你们有所收获。
好记性不如‘烂笔头’。
.net Dapper 学习系列(1) ---Dapper入门的更多相关文章
- .net Dapper 学习系列(2) ---Dapper进阶
目录 写在前面 前期准备 Dapper 单表批量添加 在Dapper 多表查询 在Dapper 调用存储过程 在Dapper 使用QueryMultiple进行多表查询 在Dapper 使用事务进行多 ...
- 分布式学习系列【dubbo入门实践】
分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...
- Dapper学习(四)之Dapper Plus的大数据量的操作
这篇文章主要讲 Dapper Plus,它使用用来操作大数量的一些操作的.比如插入1000条,或者10000条的数据时,再使用Dapper的Execute方法,就会比较慢了.这时候,可以使用Dappe ...
- Linux学习系列之Linux入门(二)Vim学习
第二篇 Vim学习 主要内容: 基本命令: 插件扩展: 参考资料: vim是一个命令控制的文本编辑器,可以完成几乎我们想要做的所有工作,除了Emacs几乎没有其他的工具能和它匹敌.官方网站是:http ...
- Linux学习系列之Linux入门(三)gcc学习
GCC(GNU Compiler Collection,GNU编译器套装),是一套由GNU开发的编程语言编译器.它是一套以GPL及LGPL许可证所发布的自由软件,也是GNU计划的关键部分,亦是自由的类 ...
- Linux学习系列之Linux入门(一)linux安装与入门
第一篇:安装并配置Linux开发环境 一.安装linux: 主要安装Linux的发行版,到目前为之,主要的发行版有: 比较常用的是Ubuntu.redhat和centOS,主要的安装方法详细: Ubu ...
- Quartz.NET学习系列
Quartz.NET它是一个开源的任务调度引擎,对于周期性任务,持久性任务提供了很好的支持,并且支持持久性.集群等功能. 这是什么对我来说Quartz.NET学习记录: 源代码下载http://yun ...
- Net系列框架-Dapper+简单三层架构
Net系列框架-Dapper+简单三层架构 工作将近6年多了,工作中也陆陆续续学习和搭建了不少的框架,后续将按由浅入深的方式,整理出一些框架源码,所有框架源码本人都亲自调试通过,如果有问题,欢迎联系我 ...
- Net系列框架-Dapper+AutoFac 基于接口
Net系列框架-Dapper+AutoFac 基于接口 工作将近6年多了,工作中也陆陆续续学习和搭建了不少的框架,后续将按由浅入深的方式,整理出一些框架源码,所有框架源码本人都亲自调试通过,如果有问题 ...
随机推荐
- 深入理解JVM,7种垃圾收集器
本人免费整理了Java高级资料,一共30G,需要自己领取.传送门:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 如果说收集算法是内存回收的方法论, ...
- kafka以及消息队列详解
Kafka 是LinkedIn 开发的一个高性能.分布式的消息系统. 用途:广泛用于日志收集.流式数据处理.在线和离线消息分发等场景. 1. Kafka 将消息流按Topic 组织,保存消息的服务器称 ...
- Linux(ubuntu) 一行代码搞定查看文件目录
ls 命令:• ls 是英文单词 list 的简写,其功能为列出目录的内容,是用户最常用的命令之一,类似于 DOS 下的 dir 命令 ls命令之后加各种参数的作用: ls -a 显示指定目录下所有子 ...
- 剑指offer 17:合并两个有序链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 解题思路 链表基础操作考察,难点在于对于输入数据的把握,一定要考虑输入数据的全面性 1.出现 ...
- FastJSON使用例子
FastjsonTest.java package demo; import java.util.ArrayList; import java.util.Date; import java.util. ...
- python的列表元素输出
1)for循环输出 这种方法是大家最容易想到的,也是最简单的,但是它有一个弊端:它的输出是竖向排列的,而我们往往需要水平输出. >>> for i in [1,2,3]: print ...
- 渗透测试学习 十五、 文件上传&&解析漏洞
大纲:文件解析漏洞 上传本地验证绕过 上传服务器验证绕过 文件解析漏洞 解析漏洞主要说的是一些特殊文件被IIS.Apache.Nginx在某些情况下解释成脚本文件格式的漏洞. IIS 5.x/6.0解 ...
- Java学习笔记(1)--- 简介
简介: 注:和之前的C不一样,本人没有学过java,所以内容上可能会相对详细一些. 主要特性: 1.这跟c++一样是面对对象语言: Java语言提供类.接口和继承等面向对象的特性,为了简单起见,只支持 ...
- 【洛谷P2494】 [SDOI2011]保密(分数规划+最小割)
洛谷 题意: 题意好绕好绕...不想写了. 思路: 首先类似于分数规划做法,二分答案得到到每个点的最小危险度. 然后就是在一个二分图中,两边撤掉最少的点(相应代价为上面算出的危险度)及相应边,使得中间 ...
- C++ 学习六 operator关键字(重载)
转载:http://blog.sina.com.cn/s/blog_4b3c1f950100kker.html operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将 o ...