接口:

    /// <summary>
/// 数据库操作
/// </summary>
public interface IDAL_Services
{
/// <summary>
/// 添加数据(实体模式)
/// </summary>
/// <param name="connectionStrings">要连接的数据库</param>
/// <param name="model">插入的数据</param>
/// <returns></returns>
Task<bool> InsertData<TEntity>(string connectionStrings, TEntity model) where TEntity : class, new();
/// <summary>
/// 添加数据集(实体模式)
/// </summary>
/// <param name="connectionStrings">要连接的数据库</param>
/// <param name="model">插入的数据</param>
/// <returns></returns>
Task<bool> InsertDatas<TEntity>(string connectionStrings, List<TEntity> model) where TEntity : class, new();
/// <summary>
/// 添加数据(json数组模式)
/// </summary>
/// <param name="connectionStrings">要连接的数据库</param>
/// <param name="recordList">待添加数据列表</param>
/// <param name="tableName">表名</param>
/// <returns></returns>
Task<bool> InsertData(string connectionStrings, List<Dictionary<string, object>> recordList,string tableName);
/// <summary>
/// 添加数据(json模式)
/// </summary>
/// <param name="connectionStrings">要连接的数据库</param>
/// <param name="record">待添加数据</param>
/// <param name="tableName">表名</param>
/// <returns></returns>
Task<bool> InsertData(string connectionStrings, Dictionary<string, object> record, string tableName);
/// <summary>
/// 查询单条数据
/// </summary>
/// <typeparam name="TEntity">数据库实体</typeparam>
/// <param name="connectionStrings">要连接的数据库</param>
/// <param name="whereExpression">查询条件</param>
/// <returns></returns>
Task<TEntity> QueryData<TEntity>(string connectionStrings, Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, object>> orderby=null,OrderByType orderByType=0);
/// <summary>
/// 查询数据列表
/// </summary>
/// <typeparam name="TEntity">数据库实体</typeparam>
/// <param name="connectionStrings">要连接的数据库</param>
/// <param name="whereExpression">查询条件</param>
/// <returns></returns>
Task<List<TEntity>> QueryDataList<TEntity>(string connectionStrings, Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, object>> orderby = null, OrderByType orderByType = OrderByType.Asc);
/// <summary>
/// 查询指定值
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <param name="connectionStrings">要连接的数据库</param>
/// <param name="where">查询条件</param>
/// <param name="column">目标值</param>
/// <returns></returns> Task<string> QueryValue<TEntity>(string connectionStrings, Expression<Func<TEntity, bool>> where, Expression<Func<TEntity, string>> column);
/// <summary>
/// 查询指定值 分组模式
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <param name="connectionStrings"></param>
/// <param name="where"></param>
/// <param name="column"></param>
/// <param name="group"></param>
/// <returns></returns>
Task<List<string>> QueryValueGroup<TEntity>(string connectionStrings, Expression<Func<TEntity, bool>> where, Expression<Func<TEntity, string>> column, Expression<Func<TEntity, object>> group, Expression<Func<TEntity, object>> orderby = null, OrderByType orderByType = OrderByType.Asc);
/// <summary>
/// 查询指定值集合
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <param name="connectionStrings">要连接的数据库</param>
/// <param name="where">查询条件</param>
/// <param name="column">目标值</param>
/// <returns></returns>
Task<List<string>> QueryValues<TEntity>(string connectionStrings, Expression<Func<TEntity, bool>> where, Expression<Func<TEntity, string>> column);
/// <summary>
/// 更新指定数据
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <param name="connectionStrings">要连接的数据库</param>
/// <param name="model">数据实体</param>
/// <param name="where">条件</param>
/// <returns></returns>
Task<bool> UpdateData<TEntity>(string connectionStrings, TEntity model, Expression<Func<TEntity, bool>> where) where TEntity : class, new();
/// <summary>
/// 更新指定数据 忽略某些字段
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <param name="connectionStrings">要连接的数据库</param>
/// <param name="model">数据实体</param>
/// <param name="where">条件</param>
/// <param name="IgnoreColumn">要忽略的字段</param>
/// <returns></returns>
Task<bool> UpdateData<TEntity>(string connectionStrings, TEntity model, Expression<Func<TEntity, bool>> where, Expression<Func<TEntity, object>> IgnoreColumn) where TEntity : class, new();
/// <summary>
/// 更新指定数据 如果目标列不存在 则为插入本条数据
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <param name="connectionStrings">要连接的数据库</param>
/// <param name="model">数据实体</param>
/// <param name="where">更新条件</param>
/// <param name="column">目标列</param>
/// <returns></returns>
Task<bool> UpdateData<TEntity>(string connectionStrings, TEntity model, Expression<Func<TEntity, bool>> where, Expression<Func<TEntity, string>> column) where TEntity : class, new();
/// <summary>
/// 更新数据(json数组模式)
/// </summary>
/// <param name="connectionStrings">要连接的数据库</param>
/// <param name="recordList">待添加数据列表</param>
/// <param name="tableName">表名</param>
/// <param name="whereColumns">更新条件键名</param>
/// <returns></returns>
Task<bool> UpdateData(string connectionStrings, List<Dictionary<string, object>> recordList, string tableName, string whereColumns);
/// <summary>
/// 更新数据(json模式)
/// </summary>
/// <param name="connectionStrings">要连接的数据库</param>
/// <param name="record">待添加数据</param>
/// <param name="tableName">表名</param>
/// <param name="whereColumns">更新条件键名</param>
/// <returns></returns>
Task<bool> UpdateData(string connectionStrings, Dictionary<string, object> record, string tableName, string whereColumns);
}

实现:

 public class DAL_Services: IDAL_Services
{
private SqlSugarClient GetInstance(string connectionStrings)
{
//创建数据库对象
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
//根据传过来的枚举数据库连接找到对应的数据库
ConnectionString = AppConfigurtaionServices.Configuration.GetSection(connectionStrings).Value,
DbType = DbType.MySql,
IsAutoCloseConnection = true,//开启自动释放模式
InitKeyType = InitKeyType.Attribute//从特性读取主键自增信息
}); //添加Sql打印事件,开发中可以删掉这个代码
db.Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine(sql + "\r\n" + db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
Console.Write("sql执行时间:" + db.Ado.SqlExecutionTime.TotalSeconds.ToString());//输出SQL执行时间
Console.WriteLine();
};
return db;
}
public async Task<TEntity> QueryData<TEntity>(string connectionStrings, Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, object>> orderby=null,OrderByType orderByType=OrderByType.Asc)
{
var db = GetInstance(connectionStrings);//获取SqlSugarClient
return await db.Queryable<TEntity>().WhereIF(whereExpression != null, whereExpression).OrderByIF(orderby!=null,orderby,orderByType).FirstAsync();
}
public async Task<List<TEntity>> QueryDataList<TEntity>(string connectionStrings,Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, object>> orderby = null, OrderByType orderByType = OrderByType.Asc)
{
var db = GetInstance(connectionStrings);//获取SqlSugarClient
return await db.Queryable<TEntity>().WhereIF(whereExpression != null, whereExpression).OrderByIF(orderby != null, orderby, orderByType).ToListAsync();
} public async Task<bool> InsertData<TEntity>(string connectionStrings, TEntity model) where TEntity:class,new()
{
var db = GetInstance(connectionStrings);//获取SqlSugarClient
var i = await db.Insertable(model).ExecuteCommandAsync();
return i > 0;
}
public async Task<bool> InsertDatas<TEntity>(string connectionStrings,List<TEntity> model) where TEntity : class, new()
{
var db = GetInstance(connectionStrings);//获取SqlSugarClient
var i = await db.Insertable(model).ExecuteCommandAsync();
return i > 0;
}
public async Task<string> QueryValue<TEntity>(string connectionStrings, Expression<Func<TEntity, bool>> where, Expression<Func<TEntity, string>> column)
{
var db = GetInstance(connectionStrings);//获取SqlSugarClient
return await db.Queryable<TEntity>().Where(where).Select(column).FirstAsync();//查询单条
}
public async Task<List<string>> QueryValueGroup<TEntity>(string connectionStrings, Expression<Func<TEntity, bool>> where, Expression<Func<TEntity, string>> column, Expression<Func<TEntity, object>> group,Expression<Func<TEntity, object>> orderby = null, OrderByType orderByType = OrderByType.Asc)
{
var db = GetInstance(connectionStrings);//获取SqlSugarClient
return await db.Queryable<TEntity>().OrderByIF(orderby!=null,orderby,orderByType).GroupBy(group).Where(where).Select(column).ToListAsync();
}
public async Task<List<string>> QueryValues<TEntity>(string connectionStrings, Expression<Func<TEntity, bool>> where, Expression<Func<TEntity, string>> column)
{
var db = GetInstance(connectionStrings);//获取SqlSugarClient
return await db.Queryable<TEntity>().Where(where).Select(column).ToListAsync();
}
public async Task<bool> UpdateData<TEntity>(string connectionStrings, TEntity model, Expression<Func<TEntity, bool>> where) where TEntity : class, new()
{
var db = GetInstance(connectionStrings);//获取SqlSugarClient
var i= await db.Updateable(model).Where(where).ExecuteCommandAsync();
return i > 0;
} public async Task<bool> UpdateData<TEntity>(string connectionStrings, TEntity model, Expression<Func<TEntity, bool>> where, Expression<Func<TEntity, string>> column) where TEntity : class, new()
{
//查询当前值是否存在
var targetColumn = await QueryValue(connectionStrings, where, column);
if (!string.IsNullOrEmpty(targetColumn))
{
return await UpdateData(connectionStrings, model,where);
}
else
{
return await InsertData(connectionStrings, model);
}
} public async Task<bool> UpdateData<TEntity>(string connectionStrings, TEntity model, Expression<Func<TEntity, bool>> where, Expression<Func<TEntity, object>> IgnoreColumn) where TEntity : class, new()
{
var db = GetInstance(connectionStrings);//获取SqlSugarClient
var i = await db.Updateable(model).IgnoreColumns(IgnoreColumn).Where(where).ExecuteCommandAsync();
return i > 0;
} public async Task<bool> InsertData(string connectionStrings, List<Dictionary<string, object>> recordList, string tableName)
{
var db = GetInstance(connectionStrings);//获取SqlSugarClient
var i =await db.Insertable(recordList).AS(tableName).ExecuteCommandAsync();
return i > 0;
} public async Task<bool> InsertData(string connectionStrings, Dictionary<string, object> record, string tableName)
{
var db = GetInstance(connectionStrings);//获取SqlSugarClient
var i =await db.Insertable(record).AS(tableName).ExecuteCommandAsync();
return i > 0;
} public async Task<bool> UpdateData(string connectionStrings, List<Dictionary<string, object>> recordList, string tableName,string whereColumns)
{
var db = GetInstance(connectionStrings);//获取SqlSugarClient
var i = await db.Updateable(recordList).AS(tableName).WhereColumns(whereColumns).ExecuteCommandAsync();
return i > 0;
} public async Task<bool> UpdateData(string connectionStrings, Dictionary<string, object> record, string tableName, string whereColumns)
{
var db = GetInstance(connectionStrings);//获取SqlSugarClient
var i = await db.Updateable(record).AS(tableName).WhereColumns(whereColumns).ExecuteCommandAsync();
return i > 0;
}
}

配置文件读取类

    /// <summary>
/// 类库读取配置文件
/// </summary>
public class AppConfigurtaionServices
{
public static IConfiguration Configuration { get; set; }
static AppConfigurtaionServices()
{
//ReloadOnChange = true 当appsettings.json被修改时重新加载
Configuration = new ConfigurationBuilder()
//.SetBasePath(Directory.GetCurrentDirectory())
//AppDomain.CurrentDomain.BaseDirectory是程序集基目录,所以appsettings.json,需要复制一份放在程序集目录下,
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true })
.Build();
} }

配置文件 appsettings.json

 "ConnectionStrings": {
"DB1": "server=127.0.0.1;port=3306;database=testdb1;uid=root;pwd=123456;SslMode=none;",
"DB2": "server=127.0.0.1;port=3306;database=testdb2;uid=root;pwd=123456;SslMode=none;"
}

调用方式

await _DAL.QueryDataList<表实体>("ConnectionStrings:DB1", w => w.ID.Equals("1"));

注:

方法未经投入生产使用 仅供参考

封装了一些sqlsugar的常用方法 用来动态切换数据库和依赖注入 支持泛型的更多相关文章

  1. 记录对依赖注入的小小理解和autofac的简单封装

    首先,我不是一个开发者,只是业余学习者.其次我的文化水平很低,写这个主要是记录一下当前对于这块的理解,因为对于一个低水平 的业余学习者来说,忘记是很平常的事,因为接触.应用的少,现在理解,可能过段时间 ...

  2. Spring.NET依赖注入框架学习--实例化容器常用方法

    Spring.NET依赖注入框架学习---实例化容器常用方法 本篇学习实例化Spring.NET容器的俩种方式 1.通过XmlObjectFactory创建一个Spring.NET容器 IResour ...

  3. RecyclerViewSelectableAdapterDemo【封装BaseSelectableAdapter用于多选、单选,以及切换选中状态等功能】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 记录封装单选.多选.切换选中状态的BaseSelectableAdapter基类,配合Recyclerview使用. 注意:此Dem ...

  4. rxjava封装,RxBus封装(上线项目集成,声明周期管理,处理溢出内存,支持同时多个请求。)

    Github地址 RxLibrary工程:1.rxjava2 + retrofit2的封装,常用的请求(Get,Post,文件上传,文件下载),防止内存泄漏,简单便捷,支持自定义loading等属性. ...

  5. 4.6 .net core依赖注入的封装

    现在流行的系统一般都采用依赖注入的实现方式,利用DI容器来直接获取所用到的类/接口的实例..net core也一样采用DI的方式,提供了DI容器的接口IServiceCollection,并提供了基于 ...

  6. 多封装,少开放。强烈建议C++标准添加class之间的注入机制

    近日在改动了一下下引擎代码(为了自己的组件),发现有些接口是仅仅有特定类及其内部函数才去訪问,却不使用友元声明的形式进行数据訪问--当然使用了普通非virtual的形式也就是意味着不建议重载. 故此: ...

  7. (7)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 利用Polly+AOP+依赖注入封装的降级框架

    创建简单的熔断降级框架 要达到的目标是: 参与降级的方法参数要一样,当HelloAsync执行出错的时候执行HelloFallBackAsync方法. public class Person { [H ...

  8. c++动态库封装及调用(3、windows下动态库调用)

    1.DLL的隐式调用 隐式链接采用静态加载的方式,比较简单,需要.h..lib..dll三件套.新建“控制台应用程序”或“空项目”.配置如下: 项目->属性->配置属性->VC++ ...

  9. c++动态库封装及调用(2、windows下动态库创建)

    DLL即动态链接库(Dynamic-Link Libaray)的缩写,相当于Linux下的共享对象.Windows系统中大量采用了DLL机制,甚至内核的结构很大程度依赖与DLL机制.Windows下的 ...

随机推荐

  1. CSS中的块级元素,行内元素,行内块元素

    博客转载于:https://blog.csdn.net/swebin/article/details/90405950 块级元素 block 块级元素,该元素呈现块状,所以他有自己的宽度和高度,也就是 ...

  2. POj1860(floyd+正权回路)

    题目传送门 题意:有多种汇币,汇币之间可以交换,这需要手续费,当你用100A币交换B币时,A到B的汇率是29.75,手续费是0.39,那么你可以得到(100 - 0.39) * 29.75 = 296 ...

  3. Java关于整型类缓存[-128,127]之间的数字

    我们在学习Java的包装类Integer.Long的时候可能会遇到这个问题: ①Integer a = 500;// Integer a = Integer.valueOf(500); 等价于上面的 ...

  4. 《逆向工程核心原理》——IAThook

    hook逻辑写入dll中,注入dll. #include "pch.h" #include <tchar.h> #include "windows.h&quo ...

  5. 攻防世界 reverse BabyXor

    BabyXor     2019_UNCTF 查壳 脱壳 dump 脱壳后 IDA静态分析 int main_0() { void *v0; // eax int v1; // ST5C_4 char ...

  6. CPython-对象/类型系统

    Python中一切皆对象,包括实例对象和类型对象,如整数.浮点数.字符串是实例对象,整数类型.浮点数类型.字符串类型是类型对象. # [Python]>>> n=10 >> ...

  7. LevelDB 源码解析之 Arena

    GitHub: https://github.com/storagezhang Emai: debugzhang@163.com 华为云社区: https://bbs.huaweicloud.com/ ...

  8. 热更新语言--lua学习笔记

    一.lua安装和编程环境搭建 lua语言可以在官网:http://luadist.org/下载安装包安装,编程IDE之前学习使用的是SciTE(https://www.cnblogs.com/movi ...

  9. istio:在vs中实现ab测试和路径切割

    此篇内容 主要目的是总结vs中的match的有关规则和在istio中如何实现路径切割(当下版本1.8.2) 实验demo main.go package main import ( "git ...

  10. ES 分页方案

    ES 中,存在三种常见的分页方案: FROM, SIZE Search-After Scroll 下面将依次比较三种方案之间的 trede-off,并给出相应建议的应用场景. 常见分页,FROM, S ...