Dapper.Net 应用
Dapper应用
1.Dapper是什么
Dapper是一款轻量级ORM工具。如果你在小的项目中,使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper 将是你不二的选择。
2.为什么使用
- 轻量,编译完成之后只有120k(好象是变胖了)
- 速度快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。
- 支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server
- 可以映射一对一,一对多,多对多等多种关系。
- 性能高。通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。
- 支持FrameWork2.0,3.0,3.5,4.0,4.5
3.使用Dapper.Net并演示
1. 使用Sqlserver创建测试表
2.创建winform应用程序,引用Dapper封装基础应用和框架
3.创建简单页面实现CRUD
4.开始实现
4.1创建表
CREATE DATABASE test
USE test
GO
CREATE TABLE Test
(
testId INT PRIMARY KEY IDENTITY,
testName VARCHAR(50) NULL
) INSERT INTO Test VALUES ('CallmeYhz') INSERT INTO Test VALUES('周公瑾')
4.2实体
public class Test
{
public int testId { get; set; }
public string testName { get; set; }
}
4.3 Nuget包
4.4 封装搭建
该类实现接口
public interface IDaoBase<T, TKey> where T : class
{
int Count(IPredicate predicate, bool buffered = false);
bool Delete(IPredicate predicate);
bool DeleteByID(TKey key);
bool DeleteByIDList(Expression<Func<T, object>> expression, IEnumerable<TKey> idList);
int Execute(string sql, dynamic param = null);
bool Exists(string sql, dynamic param = null, bool buffered = false);
IEnumerable<TReturn> Get<TFirst, TSecond, TReturn>(string sql, Func<TFirst, TSecond, TReturn> map, dynamic param = null, IDbTransaction transaction = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = null);
IList<T> GetAll();
T GetByID(TKey key);
IEnumerable<T> GetByIDList(Expression<Func<T, object>> expression, IEnumerable<TKey> idList, bool buffered = false);
T GetEntity(IPredicate predicate, bool buffered = false);
T GetEntity(string sql, object param, bool buffered = false);
PagedList<T> GetEntityPageList(SearchBase search);
IList<T> GetList(IPredicate predicate = null, IList<ISort> sort = null, bool buffered = false);
IList<T> GetList(string sql, object param = null, bool buffered = true);
IList<TEntity> GetList<TEntity>(string sql, object param = null, bool buffered = true);
SqlMapper.GridReader GetMultiple(string sql, dynamic param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null);
TScale GetScale<TScale>(string sql, dynamic param = null, bool buffered = false);
dynamic Insert(T entity);
void InsertBatch(IEnumerable<T> entityList, IDbTransaction transaction = null);
bool Update(T entity);
void UpdateBatch(IEnumerable<T> entityList);
}
数据连接工厂
public class ConnectionFactory
{
/// <summary>
/// 数据库连接
/// </summary>
public static string ConnectionString { set; get; } /// <summary>
/// 数据库类型
/// </summary>
public static DatabaseType DataBaseType { set; get; } /// <summary>
/// 初始化
/// </summary>
/// <param name="conectionString">连接串</param>
/// <param name="dataBaseType">数据库类型</param>
public static void Init(string conectionString, DatabaseType dataBaseType = DatabaseType.SqlServer)
{
ConnectionFactory.ConnectionString = conectionString;
ConnectionFactory.DataBaseType = dataBaseType;
} /// <summary>
/// 创建数据库连接
/// </summary>
/// <returns></returns>
public static IDbConnection CreateConnection()
{
IDbConnection connection = null; switch (ConnectionFactory.DataBaseType)
{
case DatabaseType.SqlServer:
connection = new SqlConnection(ConnectionFactory.ConnectionString);
break; } return connection;
}
}
public class TestDao : DaoBase<Test,int>
{
/// <summary>
/// 获取所有数据
/// </summary>
/// <returns></returns>
public IList<Test> GetAllList()
{
string sql = @"
SELECT*FROM Test";
return this.GetList<Test>(sql);
} /// <summary>
/// 根据名称获取实体
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public Test GetByName(string name)
{
string sql = @"
SELECT*FROM Test WHERE testName=@testName";
return this.GetEntity(sql, new { testName = name });
} }
构造一个简单Winform界面
配置数据库连接字符串并且初始化
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings>
<!-- 测试 -->
<add name="db" connectionString=" Data Source=.;Initial Catalog=test;Integrated Security=SSPI; " /> </connectionStrings>
</configuration>
//初始化数据库连接
ConnectionFactory.Init(ConfigurationManager.ConnectionStrings["db"].ConnectionString);
4.5演示
Dapper.Net 应用的更多相关文章
- Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示
Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...
- Dapper扩展之~~~Dapper.Contrib
平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html#skill 上一篇文章:Dapper逆天入门~强类型,动态类型 ...
- 由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序
异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 今天帮群友整理Dapper基础教程的时候手脚快了点,然后遇到了一个小问题,Dapp ...
- Dapper.Contrib:GetAsync<T> only supports an entity with a [Key] or an [ExplicitKey] property
异常处理:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 原来Model是这样滴 修改后是这样滴 注意点:Model里面的Table和Key ...
- Dapper where Id in的解决方案
简单记一下,一会出去有点事情~ 我们一般写sql都是==>update NoteInfo set NDataStatus=@NDataStatus where NId in (@NIds) Da ...
- ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)
操作 MySql 数据库使用MySql.Data程序包(MySql 开发,其他第三方可能会有些问题). project.json 代码: { "version": "1. ...
- Asp.Net Core + Dapper + Repository 模式 + TDD 学习笔记
0x00 前言 之前一直使用的是 EF ,做了一个简单的小项目后发现 EF 的表现并不是很好,就比如联表查询,因为现在的 EF Core 也没有啥好用的分析工具,所以也不知道该怎么写 Linq 生成出 ...
- 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】
前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...
- mono for android中使用dapper或petapoco对sqlite进行数据操作
在mono for android中使用dapper或petapoco,很简单,新建android 类库项目,直接把原来的文件复制过来,对Connection连接报错部分进行注释和修改就可以运行了.( ...
- Dapper:The member of type SeoTKD cannot be used as a parameter Value
异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 上次说了一下Dapper的扩展Dapper.Contrib http://www. ...
随机推荐
- Linux的文件权限与目录配置
用户与用户组(Linux是一个多用户多任务的系统) 文件所有者 设置适当的权限,其他人无法看到自己的文件 用户组概念 属于同一个用户组的可以看到这个团体的公共信息,每个账户都可以有多个用户组的 ...
- Nginx中的一些匹配顺序
Nginx中经常需要做各种配置,总结如下: 1.server_name配置 nginx中的server_name指令主要用于配置基于名称虚拟主机,同一个Nginx虚拟主机中,可以绑定多个server_ ...
- asp.net设置默认打开页面,Web.config,defaultDocument
The web.config file can be used to set a default document, or list of default documents for your web ...
- JavaScript函数的概念
函数是这样的一段代码,它只定义一次,但可能被执行或调用任意多次. JavaScript函数是参数化的:函数的定义会包含形参,这些参数在函数的整体中像局部变量一样工作.函数调用时会为形参提供实参的值.除 ...
- MMORPG大型游戏设计与开发(服务器 游戏场景 动态场景与副本)
场景的内容讲解到今天算是暂时划上一个句号了,接下来为大家讲解的是AI部分(大型AI),如果有兴趣的朋友不妨持续关注这些文章,大家一起学习和进步.动态场景和副本是场景中特殊的类型,副本在这里想必已经是无 ...
- 【2016-11-7】【坚持学习】【Day22】【Oracle 分页查询】
方法1: select * from (select rownum rn, temp.* from ( +sqlText+ ) temp ) where rn > "+ start + ...
- 重构与模式(Refactoring to Patterns)-读书笔记
第一章 ☛过度设计:是指代码的灵活性和复杂性超出所需. 第二章 ☛重构是一种保持行为的转换. 第三章 ☛每一个模式都是由三部分组成的规则,他表达的是某一环境,一个问题以及解决问题的方案之间的关系. ☛ ...
- java 多线程之wait(),notify,notifyAll(),yield()
wait(),notify(),notifyAll()不属于Thread类,而是属于Object基础类,也就是说每个对像都有wait(),notify(),notifyAll()的功能.因为都个对像都 ...
- jquery easyui 1.4.1 验证时tooltip 的位置调整
现象是在表单中如果显示两列控件,右边的控件是combo,combobox 等右边有按钮的,宽度为100%时,验证不通过的tooltip 显示位置不准确如下图所示 打开 jquery.easyui-1. ...
- 2748: [HAOI2012]音量调节 bzoj
Description 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都要改变一次音量.在演出开始之前,他已经做好了一个列表,里面写着在每首歌开始之前他想要改 ...