封装了一些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学习之路 -- Java怎么学?
@ 目录 java基础怎么学? 学完基础学什么? 几个常用框架学完学什么? MQ JVM的知识跑不掉 微服务等等 其他 数据结构和算法 java基础怎么学? 当时,作为懵懂的小白,大一学习了c和c++ ...
- 【Makefile】2-Makefile的介绍及原理
目录 前言 概念 Chapter 2:介绍 2.1 makefile的规则 2.3 make 是如何工作的 ** 2.5 让 make 自动推导 2.8 Makefile 里面有什么 2.9 Make ...
- Java代码实现热部署
一.思路 0. 监听java文件最后修改时间,如果发生变化,则表示文件已经修改,进行重新编译 1. 编译java文件为 class文件 2. 通过手写类加载器,加载 class文件 ,创建对象 3. ...
- OpenCV 之 平面单应性
上篇 OpenCV 之 图象几何变换 介绍了等距.相似和仿射变换,本篇侧重投影变换的平面单应性.OpenCV相关函数.应用实例等. 1 投影变换 1.1 平面单应性 投影变换 (Projectiv ...
- 系统编程-信号-总体概述和signal基本使用
信号章节 -- 信号章节总体概要 信号基本概念 信号是异步事件,发送信号的线程可以继续向下执行而不阻塞. 信号无优先级. 1到31号信号是非实时信号,发送的信号可能会丢失,不支持信号排队. 31号信号 ...
- [GDKOI2021] 提高组 Day 2 总结
[ G D K O I 2021 ] 提 高 组 D a y 2 总 结 不明的感觉今天的题比昨天的简单些,感觉今天爆炸的可能性很低. 嗯,于是乎,就很自信地打完了比赛.然后下午 ...
- [树形DP]没有上司的晚会
没 有 上 司 的 晚 会 没有上司的晚会 没有上司的晚会 题目描述 Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.每个职 ...
- [Fundamental of Power Electronics]-PART I-3.稳态等效电路建模,损耗和效率-3.1 直流变压器模型
3.1 直流变压器模型 如图3.1所示,任何开关变换器都包含三个部分:功率输入,功率输出以及控制输入.输入功率按控制输入进行特定的功率变换输出到负载.理想情况下,这些功能将以100%的效率完成,因此 ...
- 201871030102-崔红梅 实验二 个人项目—— D{0-1}KP 项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 实验二作业链接 我的课程学习目标 1.熟练掌握将本地代码保存至GitHub中2.掌握折扣背包问题3.回顾动态规划算法和回溯算法4.对java语 ...
- 结对编程-stage_2
教学班 罗杰.任建班周五3.4节 gitlab项目地址 Here it is. 成员 周远航(3004) 李辰洋(3477) 结对编程体验 经过了上一阶段的磨合,第二阶段我们的配合更加流畅,也熟悉了对 ...