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> /// 文件夹操作类 /// ...
随机推荐
- ABP框架系列之五十一:(Timing-定时)
Introduction While some applications target a single timezone, some others target to many different ...
- 【慕课网实战】Spark Streaming实时流处理项目实战笔记十八之铭文升级版
铭文一级: 功能二:功能一+从搜索引擎引流过来的 HBase表设计create 'imooc_course_search_clickcount','info'rowkey设计:也是根据我们的业务需求来 ...
- valgrind内存检测工具
valgrind 那点事 ---------------------------------------内存检测工具 valgrind要使用此工具,可以使用--tool=memcheck 在Valgr ...
- json、txt、xlsx
json: json异于pickle,无乱码,各语言都支持,但Python各对象只直接接收int,str,(),[],{}.读入txt时只接受str,int变为str(int),()[]{}被js ...
- Springboot+Mybatis+MySQL实例练习时踩坑记录
最近刚开始学习后端,直接让上手学习Springboot+Mybatis+MySQL对CRUD的实例,虽然实例不难,但是上面的三个知识我都不懂,就有点为难我了 所以经常遇到一个点卡自己很久的情况,这里列 ...
- 2019-4-25 html学习笔记
一.概念 文本 用于储存和记录文字信息的载体 html 超文本标记语言(本质就是给文本增加语义 如<h1></h1>就是给文字添加一级标题的语义) 注:互联网三大基石 有 ...
- 9:集合collection
第一 集合框架的概述 集合类的由来: 对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定,就使用集合容器进行存储. 集合和数组的区别: 数组虽然可以存储对象,但是长度是固定的:集合长度 ...
- 用jQuery修改右键菜单
概述 以前在网上找过屏蔽右键菜单的代码,也找过屏蔽F12的代码,今天无意之中看到别人的右键菜单很有意思,我也想来搞一个. 思路 建立一个菜单并且隐藏起来. 用window.oncontextmenu屏 ...
- Linux下用ifconfig命令设置IP、掩码、网关
设置IP和掩码ifconfig eth0 192.168.1.240 netmask 255.255.255.0设置网关route add default gw 192.168.1.1 每日一言:靡不 ...
- Data - 关于大数据
历史与趋势 大数据的前世今生:诞生.发展.未来? 如何利用数据赚钱?大数据价值变现的10种商业模式及利弊分析 10大行业大数据应用痛点及解决策略 大数据凉了?不,流式计算浪潮才刚刚开始 概念与定义 关 ...