封装了一些sqlsugar的常用方法 用来动态切换数据库和依赖注入 支持泛型
接口:
/// <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的常用方法 用来动态切换数据库和依赖注入 支持泛型的更多相关文章
- 记录对依赖注入的小小理解和autofac的简单封装
首先,我不是一个开发者,只是业余学习者.其次我的文化水平很低,写这个主要是记录一下当前对于这块的理解,因为对于一个低水平 的业余学习者来说,忘记是很平常的事,因为接触.应用的少,现在理解,可能过段时间 ...
- Spring.NET依赖注入框架学习--实例化容器常用方法
Spring.NET依赖注入框架学习---实例化容器常用方法 本篇学习实例化Spring.NET容器的俩种方式 1.通过XmlObjectFactory创建一个Spring.NET容器 IResour ...
- RecyclerViewSelectableAdapterDemo【封装BaseSelectableAdapter用于多选、单选,以及切换选中状态等功能】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 记录封装单选.多选.切换选中状态的BaseSelectableAdapter基类,配合Recyclerview使用. 注意:此Dem ...
- rxjava封装,RxBus封装(上线项目集成,声明周期管理,处理溢出内存,支持同时多个请求。)
Github地址 RxLibrary工程:1.rxjava2 + retrofit2的封装,常用的请求(Get,Post,文件上传,文件下载),防止内存泄漏,简单便捷,支持自定义loading等属性. ...
- 4.6 .net core依赖注入的封装
现在流行的系统一般都采用依赖注入的实现方式,利用DI容器来直接获取所用到的类/接口的实例..net core也一样采用DI的方式,提供了DI容器的接口IServiceCollection,并提供了基于 ...
- 多封装,少开放。强烈建议C++标准添加class之间的注入机制
近日在改动了一下下引擎代码(为了自己的组件),发现有些接口是仅仅有特定类及其内部函数才去訪问,却不使用友元声明的形式进行数据訪问--当然使用了普通非virtual的形式也就是意味着不建议重载. 故此: ...
- (7)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 利用Polly+AOP+依赖注入封装的降级框架
创建简单的熔断降级框架 要达到的目标是: 参与降级的方法参数要一样,当HelloAsync执行出错的时候执行HelloFallBackAsync方法. public class Person { [H ...
- c++动态库封装及调用(3、windows下动态库调用)
1.DLL的隐式调用 隐式链接采用静态加载的方式,比较简单,需要.h..lib..dll三件套.新建“控制台应用程序”或“空项目”.配置如下: 项目->属性->配置属性->VC++ ...
- c++动态库封装及调用(2、windows下动态库创建)
DLL即动态链接库(Dynamic-Link Libaray)的缩写,相当于Linux下的共享对象.Windows系统中大量采用了DLL机制,甚至内核的结构很大程度依赖与DLL机制.Windows下的 ...
随机推荐
- 基础篇:JAVA引用类型和ThreadLocal
前言 平时并发编程,除了维护修改共享变量的场景,有时我们也需要为每一个线程设置一个私有的变量,进行线程隔离,java提供的ThreadLocal可以帮助我们实现,而讲到ThreadLocal则不得不讲 ...
- Ingress-nginx工作原理和实践
本文记录/分享 目前项目的 K8s 部署结构和请求追踪改造方案 这个图算是一个通用的前后端分离的 k8s 部署结构: Nginx Ingress 负责暴露服务(nginx前端静态资源服务), 根据十二 ...
- ElasticSearch实战系列十: ElasticSearch冷热分离架构
前言 本文主要介绍ElasticSearch冷热分离架构以及实现. 冷热分离架构介绍 冷热分离是目前ES非常火的一个架构,它充分的利用的集群机器的优劣来实现资源的调度分配.ES集群的索引写入及查询速度 ...
- 学习C#第一天
学习C#第一天 先是了解了VS 2019编辑器的基本使用 安装Visual Studio https://mp.weixin.qq.com/s?__biz=MzU0MTg5NDkzNA==&m ...
- Elasticsearch优化 & filebeat配置文件优化 & logstash格式配置 & grok实践
Elasticsearch优化 & filebeat配置文件优化 & logstash格式配置 & grok实践 编码转换问题(主要就是中文乱码) (1)input 中的cod ...
- (一)Struts2框架概述
一.struts2发展历史 经过很多年发展,Struts1已经成为了高度成熟的框架,但随着时间的发展,Struts1的局限性和缺点不断的暴露出来. 现在Struts已经分化成了两个框架 ...
- SQL Server如何将查询的内容保存到新的sql 表中
我是采用语句将 查询后的数据保存到一个新表中 1)采用into table 语句,需要保存到的这个新表不需要提前创建 select *into NewTable from Table --插入新表的语 ...
- JavaWeb 补充(Cookie&JSP&Session)
1. 会话技术 1. Cookie 2. Session 2. JSP:入门学习 会话技术 1. 会话:一次会话中包含多次请求和响应. * 一次会话:浏览器第一次给服务器资源发 ...
- day-9 xctf-int_overflow
xctf-int_overflow 题目传送门:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&am ...
- 女娲造人引发思考之Java设计模式:工厂模式
目录 工厂模式的几种形态 简单工厂模式 示例 结构 优缺点 女娲抟土造人 工厂方法模式 结构 女娲举绳造人 抽象工厂模式 结构 女娲造万物 工厂模式的几种形态 工厂模式专门负责将大量有共同接口的类实例 ...