c# 封装Dapper操作类
using Dapper;
using DapperExtensions;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Threading.Tasks;
namespace DBLibrarys.DBHelper
{
/// <summary>
/// 数据库操作类
/// </summary>
public class SqlDapperHelper
{
static string connStrRead = ConfigurationManager.ConnectionStrings["Read"].ConnectionString;
static string connStrWrite = ConfigurationManager.ConnectionStrings["Write"].ConnectionString;
;
public static IDbConnection GetConnection(bool useWriteConn)
{
if (useWriteConn)
return new SqlConnection(connStrWrite);
return new SqlConnection(connStrRead);
}
public static SqlConnection GetOpenConnection()
{
var conn = new SqlConnection(connStrWrite);
conn.Open();
return conn;
}
/// <summary>
/// 执行sql返回一个对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <param name="useWriteConn"></param>
/// <returns></returns>
public static T ExecuteReaderReturnT<T>(string sql, object param = null, bool useWriteConn = false, IDbTransaction transaction = null)
{
if (transaction == null)
{
using (IDbConnection conn = GetConnection(useWriteConn))
{
conn.Open();
return conn.QueryFirstOrDefault<T>(sql, param, commandTimeout: commandTimeout);
}
}
else
{
var conn = transaction.Connection;
return conn.QueryFirstOrDefault<T>(sql, param, commandTimeout: commandTimeout, transaction: transaction);
}
}
/// <summary>
/// 执行sql返回多个对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <param name="useWriteConn"></param>
/// <returns></returns>
public static List<T> ExecuteReaderReturnList<T>(string sql, object param = null, bool useWriteConn = false, IDbTransaction transaction = null)
{
using (IDbConnection conn = GetConnection(useWriteConn))
{
conn.Open();
return conn.Query<T>(sql, param, commandTimeout: commandTimeout, transaction: transaction).ToList();
}
}
/// <summary>
/// 执行sql返回一个对象--异步
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <param name="useWriteConn"></param>
/// <returns></returns>
public static async Task<T> ExecuteReaderRetTAsync<T>(string sql, object param = null, bool useWriteConn = false)
{
using (IDbConnection conn = GetConnection(useWriteConn))
{
conn.Open();
return await conn.QueryFirstOrDefaultAsync<T>(sql, param, commandTimeout: commandTimeout).ConfigureAwait(false);
}
}
/// <summary>
/// 执行sql返回多个对象--异步
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <param name="useWriteConn"></param>
/// <returns></returns>
public static async Task<List<T>> ExecuteReaderRetListAsync<T>(string sql, object param = null, bool useWriteConn = false)
{
using (IDbConnection conn = GetConnection(useWriteConn))
{
conn.Open();
var list = await conn.QueryAsync<T>(sql, param, commandTimeout: commandTimeout).ConfigureAwait(false);
return list.ToList();
}
}
/// <summary>
/// 执行sql,返回影响行数
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <param name="transaction"></param>
/// <returns></returns>
public static int ExecuteSqlInt(string sql, object param = null, IDbTransaction transaction = null)
{
if (transaction == null)
{
using (IDbConnection conn = GetConnection(true))
{
conn.Open();
return conn.Execute(sql, param, commandTimeout: commandTimeout, commandType: CommandType.Text);
}
}
else
{
var conn = transaction.Connection;
return conn.Execute(sql, param, transaction: transaction, commandTimeout: commandTimeout, commandType: CommandType.Text);
}
}
/// <summary>
/// 执行sql,返回影响行数--异步
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <param name="transaction"></param>
/// <returns></returns>
public static async Task<int> ExecuteSqlIntAsync(string sql, object param = null, IDbTransaction transaction = null)
{
if (transaction == null)
{
using (IDbConnection conn = GetConnection(true))
{
conn.Open();
return await conn.ExecuteAsync(sql, param, commandTimeout: commandTimeout, commandType: CommandType.Text).ConfigureAwait(false);
}
}
else
{
var conn = transaction.Connection;
return await conn.ExecuteAsync(sql, param, transaction: transaction, commandTimeout: commandTimeout, commandType: CommandType.Text).ConfigureAwait(false);
}
}
/// <summary>
/// 根据id获取实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="id"></param>
/// <param name="transaction"></param>
/// <param name="useWriteConn"></param>
/// <returns></returns>
public static T GetById<T>(int id, IDbTransaction transaction = null, bool useWriteConn = false) where T : class
{
if (transaction == null)
{
using (IDbConnection conn = GetConnection(useWriteConn))
{
conn.Open();
return conn.Get<T>(id, commandTimeout: commandTimeout);
}
}
else
{
var conn = transaction.Connection;
return conn.Get<T>(id, transaction: transaction, commandTimeout: commandTimeout);
}
}
/// <summary>
/// 根据id获取实体--异步
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="id"></param>
/// <param name="transaction"></param>
/// <param name="useWriteConn"></param>
/// <returns></returns>
public static async Task<T> GetByIdAsync<T>(int id, IDbTransaction transaction = null, bool useWriteConn = false) where T : class
{
if (transaction == null)
{
using (IDbConnection conn = GetConnection(useWriteConn))
{
conn.Open();
return await conn.GetAsync<T>(id, commandTimeout: commandTimeout);
}
}
else
{
var conn = transaction.Connection;
return await conn.GetAsync<T>(id, transaction: transaction, commandTimeout: commandTimeout);
}
}
/// <summary>
/// 插入实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="item"></param>
/// <param name="transaction"></param>
/// <returns></returns>
public static string ExecuteInsert<T>(T item, IDbTransaction transaction = null) where T : class
{
if (transaction == null)
{
using (IDbConnection conn = GetConnection(true))
{
conn.Open();
var res = conn.Insert<T>(item, commandTimeout: commandTimeout);
return res;
}
}
else
{
var conn = transaction.Connection;
return conn.Insert(item, transaction: transaction, commandTimeout: commandTimeout);
}
}
/// <summary>
/// 批量插入实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <param name="transaction"></param>
public static void ExecuteInsertList<T>(IEnumerable<T> list, IDbTransaction transaction = null) where T : class
{
if (transaction == null)
{
using (IDbConnection conn = GetConnection(true))
{
conn.Open();
conn.Insert<T>(list, commandTimeout: commandTimeout);
}
}
else
{
var conn = transaction.Connection;
conn.Insert(list, transaction: transaction, commandTimeout: commandTimeout);
}
}
/// <summary>
/// 更新单个实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="item"></param>
/// <param name="transaction"></param>
/// <returns></returns>
public static bool ExecuteUpdate<T>(T item, IDbTransaction transaction = null) where T : class
{
if (transaction == null)
{
using (IDbConnection conn = GetConnection(true))
{
conn.Open();
return conn.Update(item, commandTimeout: commandTimeout);
}
}
else
{
var conn = transaction.Connection;
return conn.Update(item, transaction: transaction, commandTimeout: commandTimeout);
}
}
/// <summary>
/// 批量更新实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="item"></param>
/// <param name="transaction"></param>
/// <returns></returns>
public static bool ExecuteUpdateList<T>(List<T> item, IDbTransaction transaction = null) where T : class
{
if (transaction == null)
{
using (IDbConnection conn = GetConnection(true))
{
conn.Open();
return conn.Update(item, commandTimeout: commandTimeout);
}
}
else
{
var conn = transaction.Connection;
return conn.Update(item, transaction: transaction, commandTimeout: commandTimeout);
}
}
/// <summary>
/// 分页查询
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql">主sql 不带 order by</param>
/// <param name="sort">排序内容 id desc,add_time asc</param>
/// <param name="pageIndex">第几页</param>
/// <param name="pageSize">每页多少条</param>
/// <param name="useWriteConn">是否主库</param>
/// <returns></returns>
public static List<T> ExecutePageList<T>(string sql, string sort, int pageIndex, int pageSize, bool useWriteConn = false, object param = null)
{
string pageSql = @"SELECT TOP {0} * FROM (SELECT ROW_NUMBER() OVER (ORDER BY {1}) _row_number_,* FROM
({2})temp )temp1 WHERE temp1._row_number_>{3} ORDER BY _row_number_";
));
using (IDbConnection conn = GetConnection(useWriteConn))
{
conn.Open();
return conn.Query<T>(execSql, param, commandTimeout: commandTimeout).ToList();
}
}
}
}
c# 封装Dapper操作类的更多相关文章
- php--->单例模式封装mysql操作类
php 单例模式封装mysql操作类 单例模式的必要条件(三私一公) 私有的成员属性--防止类外引入这个存放对象的属性 私有的构造方法--为了防止在类外使用new关键字实例化对象 私有的克隆方法--为 ...
- dapper 操作类封装
using System; using System.Collections.Generic; using System.Data; using System.Data.SQLite; using S ...
- day22:面向对象封装对象操作&类操作&面向对象删除操作
面向对象程序开发 1.类的三种定义方式 class MyClass: pass class MyClass(): #(推荐) pass class MyClass(object): # object类 ...
- c# 封装 Request操作类
/// <summary> /// 判断当前页面是否接收到了Post请求 /// </summary> /// <returns>是否接收到了Post请求</ ...
- php单例模式封装数据库操作类增删改查
<?php//三私一公 单例class Db{ //数据库连接对象 private static $instance; private static $table_name; private $ ...
- Util应用程序框架公共操作类(一):数据类型转换公共操作类(介绍篇)
本系列文章将介绍一些对初学者有帮助的辅助类,这些辅助类本身并没有什么稀奇之处,如何能发现需要封装它们可能更加重要,所谓授之以鱼不如授之以渔,掌握封装公共操作类的技巧才是关键,我会详细说明创建这些类的动 ...
- Util应用程序框架公共操作类
随笔分类 - Util应用程序框架公共操作类 Util应用程序框架公共操作类 Util应用程序框架公共操作类(五):异常公共操作类 摘要: 任何系统都需要处理错误,本文介绍的异常公共操作类,用于对业务 ...
- .net core 中简单封装Dapper.Extensions 并使用sqlsuger自动生成实体类
引言 由公司需要使用dapper 同时支持多数据库 又需要支持实体类 又需要支持sql 还需要支持事务 所以采用了 dapper + dapperExtensions 并配套 生成实体类小工具的方 ...
- c# 封装的文件夹操作类之复制文件夹
c# 封装的文件夹操作类之复制文件夹 一.复制文件夹原理: 1.递归遍历文件夹 2.复制文件 二.FolderHelper.cs /// <summary> /// 文件夹操作类 /// ...
随机推荐
- 在Unity5.6.5f1中使用C#7语法
备忘,记忆力越来越差了,必需把这种琐碎的东西记下来,以防1年后想再用完全没头绪. 之前试过用C#6语法,但是怎么配置操作的完全没印象了. 首先去这下载扩展 https://bitbucket.org/ ...
- docker-compose搭建mongoDB副本集(1主+1副+1仲裁)
一.基本概念 1.副本集:一个副本集就是一组MongoDB实例组成的集群,由一个主(Primary)服务器和多个备份(Secondary)服务器构成 2.主节点(master):主节点接收所有写入操作 ...
- [Solution] JZOJ-5806 简单的操作
[Solution] JZOJ-5806 简单的操作 题面 Description 从前有个包含n个点,m条边,无自环和重边的无向图. 对于两个没有直接连边的点u;v,你可以将它们合并.具体来说,你可 ...
- windows基于vs2017的opencv安装
1.opencv下载与安装 1.下载地址:官网下载地址https://opencv.org/releases.html opencv为开源软件,可直接在官网下载最新版本. 2.软件安装:openc ...
- java基础-位运算符
1.位运算符 << 左移 : 右边以0填充 >> 带符号右移: 负数前面补1,整数补0 >>>不带符号右移 & 按位与运算 ...
- C# 多线程 举例使用
使用多线程的几种方式 (1)不需要传递参数,也不需要返回参数 ThreadStart是一个委托,这个委托的定义为void ThreadStart(),没有参数与返回值. /// <summa ...
- WPF数字滚动效果
和WPF数字滚动抽奖有区别,WPF数字滚动抽奖是随机的,而这里是确定的. 为了系统演示,这个效果通宵加班写了整整6个小时,中间就上了次厕所. 代码: RollingNumberItemCtrl.xam ...
- JQuery下载及选择器总结
JQuery下载 JQuery只是一个JS函数库,要使用其中的方法还是要在JS文件中进行调用. 一般去https://mvnrepository.com/这个网站下载,搜索JQuery就能找到JS文件 ...
- 开源播放器 ijkplayer (三) :ijkplayer支持 https 编译流程
主要是为了支持flv和m3u8,使用https播放视频的需求 ./init-android.sh ./init-android-openssl.sh // 增加https协议支持 cd android ...
- Shell - Shell脚本调试方法
Shell脚本调试选项 Shell本身提供一些调试方法选项: -n,读一遍脚本中的命令但不执行,用于检查脚本中的语法错误. -v,一边执行脚本,一边将执行过的脚本命令打印到标准输出. -x,提供跟踪执 ...