using Dapper;
using Long.Core.Query;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Long.Dapper
{
///
/// 基础数据库连接类接口
///
public interface IDatabase
{
///
/// 设置 appsettings.json 中的数据库连接字符串
///
/// 数据库配置关键字
void SetConnectionString(string dbKey);
///
/// 获取数据库连接
///
///
///
IDbConnection GetDbConnection();
#region 查询
///
/// 查询列表
///
/// 泛型
/// SQL 查询字符串
/// SQL 参数对象
/// 泛型列表
IEnumerable Query(string sqlString, object? param = null);
///
/// 查询列表
///
/// 泛型
/// SQL 查询字符串
/// SQL 参数对象
/// 泛型列表
Task> QueryAsync(string sqlString, object? param = null);
///
/// 查询第一条数据
///
/// 泛型
/// SQL 查询字符串
/// SQL 参数对象
/// 泛型对象
T QueryFirst(string sqlString, object? param = null);
///
/// 查询第一条数据
///
/// 泛型
/// SQL 查询字符串
/// SQL 参数对象
/// 泛型对象
Task QueryFirstAsync(string sqlString, object? param = null);
///
/// 获取数据
///
///
IEnumerable Get();
///
/// 获取数据
///
///
Task> GetAsync();
///
/// 获取数据
///
///
///
///
IEnumerable Get(string sql, object param);
///
/// 获取数据
///
///
///
///
Task> GetAsync(string sql, object param);
///
/// 获取数据
///
///
///
///
Task> GetAsync(string sql, object param);
///
/// 通过id获取数据
///
/// 内码
///
IEnumerable Get(long id);
///
/// 通过id获取数据
///
/// 内码
///
Task> GetAsync(long id);
///
/// 通过一堆id获取数据
///
/// 内码列表
///
IEnumerable Get(IEnumerable ids);
///
/// 通过一堆id获取数据
///
/// 内码列表
///
Task> GetAsync(IEnumerable ids);
///
/// 获取一堆数据
///
/// 查询参数
///
IEnumerable Get(QueryParamenter queryParamenter);
///
/// 获取一堆数据
///
/// 查询参数
///
Task> GetAsync(QueryParamenter queryParamenter);
///
/// 获取数据
///
/// 查询参数
///
Task> GetAsync(QueryParamenter param);
///
/// 通过id获取一条数据
///
///
TEntity GetFirst();
///
/// 通过id获取一条数据
///
///
Task GetFirstAsync();
///
/// 通过id获取一条数据
///
///
///
TEntity GetFirst(long id);
///
/// 通过id获取一条数据
///
///
///
Task GetFirstAsync(long id);
///
/// 获取一条数据
///
///
///
TEntity GetFirst(string sql);
///
/// 获取一条数据
///
///
///
Task GetFirstAsync(string sql);
///
/// 获取一条数据
///
///
///
///
TEntity GetFirst(string sql, object param);
///
/// 获取一条数据
///
///
///
///
Task GetFirstAsync(string sql, object param);
///
/// 获取一条数据
///
///
///
///
Task GetFirstAsync(string sql, object param);
///
/// 获取一条数据
///
///
///
TEntity GetFirst(QueryParamenter queryParamenter, object? param = null);
///
/// 获取一条数据
///
///
///
Task GetFirstAsync(QueryParamenter queryParamenter, object? param = null);
///
/// 获取一条数据
///
///
///
TEntity GetFirst(QueryParamenter queryParamenter);
///
/// 获取一条数据
///
///
///
Task GetFirstAsync(QueryParamenter queryParamenter);
///
/// 获取一条数据
///
///
///
T GetFirst(QueryParamenter queryParamenter);
///
/// 获取一条数据
///
///
///
Task GetFirstAsync(QueryParamenter queryParamenter);
#endregion
#region 统计
///
/// 统计表记录数
///
/// 记录数
int Count();
///
/// 统计表记录数
///
/// 记录数
Task CountAsync();
///
/// 统计表记录数
///
/// 记录数
Task CountAsync(QueryParamenter queryParamenter);
///
/// 统计表记录数
///
/// 内码
/// 记录数
int Count(long id);
///
/// 统计表记录数
///
/// 内码
/// 记录数
Task CountAsync(long id);
///
/// 统计表记录数
///
/// 表名
/// 记录数
int Count(string tableName);
///
/// 统计表记录数
///
/// 表名
/// 记录数
Task CountAsync(string tableName);
///
/// 通过条件统计表记录数
///
/// 筛选条件,不包含 WHERE 关键字
/// 记录数
int CountByWhere(string where);
///
/// 通过条件统计表记录数
///
/// 筛选条件,不包含 WHERE 关键字
/// 记录数
Task CountByWhereAsync(string where);
///
/// 通过条件统计表记录数
///
/// 内码
/// 筛选条件,不包含 WHERE 关键字
/// 记录数
int CountByWhere(long id, string where);
///
/// 通过条件统计表记录数
///
/// 内码
/// 筛选条件,不包含 WHERE 关键字
/// 记录数
Task CountByWhereAsync(long id, string where);
///
/// 通过条件统计表记录数
///
/// 表名
/// 筛选条件,不包含 WHERE 关键字
/// 记录数
int CountByWhere(string tableName, string where);
///
/// 通过条件统计表记录数
///
/// 表名
/// 筛选条件,不包含 WHERE 关键字
/// 记录数
Task CountByWhereAsync(string tableName, string where);
#endregion
#region 插入
///
/// 插入数据
///
/// SQL
/// 插入对象
/// 插入记录数
int Insert(string sql, object insert);
///
/// 插入数据
///
/// SQL
/// 插入对象
///
Task InsertAsync(string sql, object insert);
///
/// 插入数据,自动填入Id
///
/// 插入对象
/// 记录内码
long Insert(TEntity insert);
///
/// 插入数据,自动填入Id
///
/// 插入对象
/// 记录内码
Task InsertAsync(TEntity insert);
///
/// 插入一堆数据,自动填入Id
///
/// 插入对象列表
/// 记录内码列表
IEnumerable Insert(IEnumerable inserts);
///
/// 插入一堆数据,自动填入Id
///
/// 插入对象列表
/// 记录内码列表
Task> InsertAsync(IEnumerable inserts);
#endregion
#region 更新
///
/// 更新数据
///
/// SQL
/// 更新对象
///
int Update(string sql, object update);
///
/// 更新数据
///
/// SQL
/// 更新对象
///
Task UpdateAsync(string sql, object update);
///
/// 更新数据
///
/// 更新对象
///
int Update(TEntity update);
///
/// 更新数据
///
/// 更新对象
///
Task UpdateAsync(TEntity update);
///
/// 更新数据
///
/// 更新对象
/// 更新字段
///
int Update(TEntity update, string[] fields);
///
/// 更新数据
///
/// 更新对象
/// 更新字段
///
Task UpdateAsync(TEntity update, string[] fields);
///
/// 更新一堆数据
///
/// 更新对象列表
///
int Update(IEnumerable updates);
///
/// 更新一堆数据
///
/// 更新对象列表
///
Task UpdateAsync(IEnumerable updates);
///
/// 更新一堆数据
///
/// 更新对象列表
/// 更新字段
///
int Update(IEnumerable updates, string[] fields);
///
/// 更新一堆数据
///
/// 更新对象列表
/// 更新字段
///
Task UpdateAsync(IEnumerable updates, string[] fields);
#endregion
#region 删除
///
/// 删除
///
/// 内码
///
int Delete(long id);
///
/// 删除
///
/// 内码
///
Task DeleteAsync(long id);
///
/// 删除
///
/// 一堆内码
///
int Delete(IEnumerable ids);
///
/// 删除
///
/// 一堆内码
///
Task DeleteAsync(IEnumerable ids);
#endregion
#region 执行
///
/// 执行 SQL
///
/// sql字符串
///
int Execute(string sqlString);
///
/// 执行 SQL
///
/// sql字符串
///
Task ExecuteAsync(string sqlString);
///
/// 执行 SQL
///
/// sql字符串
/// 传入参数
///
int Execute(string sqlString, object? param = null);
///
/// 执行 SQL
///
/// sql字符串
/// 传入参数
///
Task ExecuteAsync(string sqlString, object? param = null);
///
/// 执行 SQL
///
/// sql字符串
/// 传入参数
/// 数据库事务
///
int Execute(string sqlString, object? param = null, IDbTransaction? dbTransaction = null);
///
/// 执行 SQL
///
/// sql字符串
/// 传入参数
/// 数据库事务
///
Task ExecuteAsync(string sqlString, object? param = null, IDbTransaction? dbTransaction = null);
///
/// 执行存储过程
///
/// sql字符串
/// 传入参数
///
int ExecuteStoredProcedure(string storedProcedure, object? param = null);
///
/// 执行存储过程
///
/// sql字符串
/// 传入参数
///
Task ExecuteStoredProcedureAsync(string storedProcedure, object? param = null);
#endregion
#region 获取SQL
///
/// 获取SQL
///
///
///
string GetSql(QueryParamenter queryParamenter);
///
/// 查询全部SQL
///
///
string GetAllSql();
///
/// 通过id查询SQL
///
///
string GetByIdSql();
///
/// 通过一堆id查询SQL
///
///
string GetByIdsSql();
///
/// 插入SQL
///
///
string InsertSql();
///
/// 更新SQL
///
///
string UpdateSql();
///
/// 更新SQL
///
/// 要更新的字段
///
string UpdateSql(string[] fields);
///
/// 更新一堆SQL
///
///
string UpdatesSql();
///
/// 更新一堆SQL
///
/// 要更新的字段
///
string UpdatesSql(string[] fields);
///
/// 获取删除SQL
///
///
string DeleteAllSql();
///
/// 通过id获取删除SQL
///
///
string DeleteSql();
///
/// 通过一堆id获取删除SQL
///
///
string DeletesSql();
#endregion
#region 获取值和编码
///
/// 设置id
///
///
///
long SetId(object param);
///
/// 设置id
///
///
///
Task SetIdAsync(object param);
///
/// 获取下一个id。请在数据库中建立表(NextValue),字段有(TableName: varchar, FieldName: varchar, Value: long)
///
/// 默认值:1
///
long GetNextValue(long defaultValue = 1);
///
/// 获取下一个id。请在数据库中建立表(NextValue),字段有(TableName: varchar, FieldName: varchar, Value: long)
///
/// 默认值:1
///
Task GetNextValueAsync(long defaultValue = 1);
///
/// 获取下一个id。请在数据库中建立表(NextValue),字段有(TableName: varchar, FieldName: varchar, Value: long)
///
/// 默认值:1
///
long GetNextValue(string tableName, string fieldName, long defaultValue = 1);
///
/// 获取下一个id。请在数据库中建立表(NextValue),字段有(TableName: varchar, FieldName: varchar, Value: long)
///
/// 默认值:1
///
Task GetNextValueAsync(string tableName, string fieldName, long defaultValue = 1);
#endregion
}
}