轻量型ORM框架Dapper的使用

        /// <summary>
/// 查询操作
/// </summary>
/// <typeparam name="T">返回集合的类型</typeparam>
/// <param name="sql">sql语句</param>
/// <param name="param">参数化值</param>
/// <returns></returns>
public IEnumerable<T> Query<T>(string sql, object param)
{
IEnumerable<T> _list = default(IEnumerable<T>);
if (!string.IsNullOrEmpty(sql))
{
try
{
_list = DbConnection.Query<T>(sql, param);
}
catch { }
}
return _list;
} /// <summary>
/// 执行存储过程查询操作
/// </summary>
/// <typeparam name="T">返回集合的类型</typeparam>
/// <param name="storedName">存储过程</param>
/// <param name="param">参数化值</param>
/// <returns></returns>
public IEnumerable<T> QueryStored<T>(string storedName, object param)
{
IEnumerable<T> _list = default(IEnumerable<T>);
if (!string.IsNullOrEmpty(storedName))
{
try
{
_list = DbConnection.Query<T>(storedName,commandType: CommandType.StoredProcedure);
}
catch { }
}
return _list;
} /// <summary>
/// 查询操作返回默认第一条数据(如返回null则创建默认类型)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public T FirstOrDefault<T>(string sql, object param)
{
var model = default(T);
if (!string.IsNullOrEmpty(sql))
{
try
{
model = DbConnection.Query<T>(sql, param).FirstOrDefault();
}
catch { }
}
return model == null ? Activator.CreateInstance<T>() : model;
} /// <summary>
/// 查询一组SQL语句并返回值
/// </summary>
/// <typeparam name="T1">第一条语句返回集合类型</typeparam>
/// <typeparam name="T2">第二条语句返回集合类型</typeparam>
/// <param name="sql">sql语句</param>
/// <param name="param">参数化值</param>
/// <returns></returns>
public Tuple<IEnumerable<T1>, IEnumerable<T2>> Query<T1, T2>(string sql, object param)
{
IEnumerable<T1> _item1 = null; IEnumerable<T2> _item2 = null;
if (!string.IsNullOrEmpty(sql))
{
try
{
using (var multi = DbConnection.QueryMultiple(sql, param))
{
_item1 = multi.Read<T1>();
_item2 = multi.Read<T2>();
}
}
catch { }
}
return Tuple.Create<IEnumerable<T1>, IEnumerable<T2>>(_item1, _item2);
} /// <summary>
/// 查询一组SQL语句并返回值
/// </summary>
/// <typeparam name="T1">第一条语句返回集合类型</typeparam>
/// <typeparam name="T2">第二条语句返回集合类型</typeparam>
/// <typeparam name="T3">第三条语句返回集合类型</typeparam>
/// <param name="sql">sql语句</param>
/// <param name="param">参数化值</param>
/// <returns></returns>
public Tuple<IEnumerable<T1>, IEnumerable<T2>, IEnumerable<T3>> Query<T1, T2, T3>(string sql, object param)
{
IEnumerable<T1> _item1 = null; IEnumerable<T2> _item2 = null; IEnumerable<T3> _item3 = null;
if (!string.IsNullOrEmpty(sql))
{
try
{
using (var multi = DbConnection.QueryMultiple(sql, param))
{
_item1 = multi.Read<T1>();
_item2 = multi.Read<T2>();
_item3 = multi.Read<T3>();
}
}
catch { }
}
return Tuple.Create<IEnumerable<T1>, IEnumerable<T2>, IEnumerable<T3>>(_item1, _item2, _item3);
} public void Dispose()
{
if (dbConnection != null)
{
try
{
bool isClosed = dbConnection.State == ConnectionState.Closed;
if (!isClosed) dbConnection.Close();
//dbConnection.Dispose();
}
catch { }
}
}
}

调用示例如下:

public abstract class BaseProvide
{
public Lazy<LiunianContext> lazyContext; protected LiunianContextDb
{
get
{
return lazyContext.Value;
}
} } public class EmployeeProvide : BaseProvide
{
/// <summary>
/// 获取数据
/// </summary>
/// <returns></returns>
public List<Employee> ListEmployeeByParam(int[] param)
{
string sql = "select * from Employee where ID in @Ids";
return Db.Query<Employee>(sql, new { Ids = param }).ToList();
} /// <summary>
/// 获取全部数据
/// </summary>
/// <returns></returns>
public List<Employee> ListEmployee()
{
string sql = "select * from Employee";
return Db.Query<Employee>(sql,null).ToList();
} /// <summary>
/// 查询单个实体
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public Employee loadEmployee(int Id)
{
string sql = "select * from Employee where ID= @Id";
return Db.FirstOrDefault<Employee>(sql, new { Id = Id });
} /// <summary>
/// 插入操作
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool InsertEmployee(Employee model)
{
StringBuilder sql = new StringBuilder();
sql.Append("insert into Employee values (@UpdateTime,@CreateTime,@State,@LoginName,@UserName,");
sql.Append("@RoleId,@IsUse)");
return Db.Execute(sql.ToString(), model);
} /// <summary>
/// 更新操作
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool UpdateEmployee(Employee model)
{
StringBuilder sql = new StringBuilder();
sql.Append("update Employee set UpdateTime = @UpdateTime where ID = @ID");
return Db.Execute(sql.ToString(), model);
} /// <summary>
/// 删除操作
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public bool DeleteEmployeeById(int Id)
{
string sql = "delete from Employee where ID = @Id";
return Db.Execute(sql.ToString(), new { Id = Id });
} /// <summary>
/// 执行多个语句返回多个结果
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public Tuple<int,IEnumerable<Employee>> ListGroupEmployee()
{
string sql = "select Count(*) from Employee select * from Employee";
Tuple<IEnumerable<int>, IEnumerable<Employee>> queryGroup = Db.Query<int, Employee>(sql, null);
return Tuple.Create<int, IEnumerable<Employee>>(queryGroup.Item1.FirstOrDefault(),queryGroup.Item2);
} }

除了没把事务加上之外其他的增删改查都有了,同时在传对象的时候Dapper也解决了sql注入的问题,在性能上也是比较好的ORM框架,需要的拿去!

Dapper的使用的更多相关文章

  1. Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

    Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...

  2. Dapper扩展之~~~Dapper.Contrib

    平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html#skill 上一篇文章:Dapper逆天入门~强类型,动态类型 ...

  3. 由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序

    异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 今天帮群友整理Dapper基础教程的时候手脚快了点,然后遇到了一个小问题,Dapp ...

  4. 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 ...

  5. Dapper where Id in的解决方案

    简单记一下,一会出去有点事情~ 我们一般写sql都是==>update NoteInfo set NDataStatus=@NDataStatus where NId in (@NIds) Da ...

  6. ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)

    操作 MySql 数据库使用MySql.Data程序包(MySql 开发,其他第三方可能会有些问题). project.json 代码: { "version": "1. ...

  7. Asp.Net Core + Dapper + Repository 模式 + TDD 学习笔记

    0x00 前言 之前一直使用的是 EF ,做了一个简单的小项目后发现 EF 的表现并不是很好,就比如联表查询,因为现在的 EF Core 也没有啥好用的分析工具,所以也不知道该怎么写 Linq 生成出 ...

  8. 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】

    前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...

  9. mono for android中使用dapper或petapoco对sqlite进行数据操作

    在mono for android中使用dapper或petapoco,很简单,新建android 类库项目,直接把原来的文件复制过来,对Connection连接报错部分进行注释和修改就可以运行了.( ...

  10. 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. ...

随机推荐

  1. 创建和关联内容数据库到指定Web应用程序和站点集

    创建和关联内容数据库到指定Web应用程序和站点集         一个Web应用程序不限于使用单个内容数据库.SharePoint同意你关联多个内容数据库到Web应用程序.原因之中的一个是基于内容数据 ...

  2. Lucene全文检索的【增、删、改、查】 实例

    创建索引 Lucene在进行创建索引时,根据前面一篇博客,已经讲完了大体的流程,这里再简单说下: Directory directory = FSDirectory.open("/tmp/t ...

  3. 该View转换成Bitmap方法

    方法一: /** * 该View绘制到Bitmap上 * @param view 须要绘制的View * @param width 该View的宽度 * @param height 该View的高度 ...

  4. _beginThreadex创建多线程解读

    _beginThreadex创建多线程解读 一.须要的头文件支持 #include <process.h>         // for _beginthread() 须要的设置:Proj ...

  5. POJ1502(Dijkstra)

    MPI Maelstrom Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5538   Accepted: 3451 题目链 ...

  6. HDU 2504 又见GCD

    又见GCD Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  7. PHP图像处理:3D图纸、缩放、回转、剪下、水印(三)

    来源:http://www.ido321.com/887.html 5.PHP对图像的旋转 1: <div> 2: <h4>旋转之前</h4> 3: <img ...

  8. UVA 11427 - Expect the Expected(概率递归预期)

    UVA 11427 - Expect the Expected 题目链接 题意:玩一个游戏.赢的概率p,一个晚上能玩n盘,假设n盘都没赢到总赢的盘数比例大于等于p.以后都不再玩了,假设有到p就结束 思 ...

  9. C语言中的函数指针

    C语言中的函数指针 函数指针的概念:   函数指针是一个指向位于代码段的函数代码的指针. 函数指针的使用: #include<stdio.h> typedef struct (*fun_t ...

  10. JSP中的include有哪些?有什么差别?

    JSP中的include有哪些?有什么差别? 1.JSP中的include有哪些 (1)<%@include file="" %> (2)<jsp:include ...