Dapper的使用
轻量型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的使用的更多相关文章
- 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. ...
随机推荐
- 利用泛型抽取Dao层,加事务注解问题(java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType)
想利用泛型抽取BaseDao层,简化操作时出现故障: @Transactional这个注解是能够继承的.于是就想写在抽取的BaseDao层上,让实现的类能够不用写@Transactional,就可开启 ...
- java 调用mysql的存储过程(简单示例)
首先我在mysql的test数据库里定义了一个student表: create table student4( id int primary key, sanme char(5) ); 插入几 ...
- MySQL 触发器结构及三个案例demo
--你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了.这跟SQL的标准有所不同. CREATE TRIGGER语法 CREATE TRIGG ...
- codeforces 112APetya and Strings(字符串水题)
A. Petya and Strings 点击打开题目 time limit per test 2 seconds memory limit per test 256 megabytes input ...
- HDU 1164 Eddy's research I【素数筛选法】
思路:将输入的这个数分成n个素数的相乘的结果,用一个数组存储起来.之后再输出就能够了 Eddy's research I Time Limit: 2000/1000 MS (Java/Others) ...
- tar解压出错
现象 # tar -zxvf aaa.tar.gz tar: This does not look like a tar archive tar: Skipping to next header ta ...
- 关于git的ssh-key:解决本地多个ssh-key的问题
在设置github的时候,官方的说明文档要求备份当前的id_rsa.然后生成一份新的私钥用于github的登陆.假设真这样做,那么新的私钥是无法再继续登陆之前的机器的. 这样的方法有点暴力- 还好ss ...
- 【Android】应用启动画面
几乎所有的Android应用程序都会有一个启动画面,展示自己的LOGO,本版信息,或者更人性化一点的,在很长的加载信息中,变换一些显示的文字等,让无聊的等待时间添加点调味剂. 具体实现来说,应该创建一 ...
- servlet 实现下载文件
servlet: public class UpAndDownServlet extends HttpServlet { public void doPost(HttpServletRequest r ...
- WPF对于xml的简单操作(下)绑定ListView
上个月做好的,电脑给盗了,没及时存在网盘,也及时发到随笔,于是乎悲哉!搞了一个上午终于绑定好了,有时候就是这么眼瞎,Path和XPath全瞎了,摸滚了一个上午,赶紧的随笔跟上先. <ListVi ...