using Dapper; using Microsoft.Extensions.Configuration; using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Data; using System.Text; using System.Threading.Tasks; namespace MyCommon.Repositories { public interface IDbRepository { /// <summary> /// 查询数据 /// </summary> /// <param name="sql"></param> /// <param name="param"></param> /// <returns></returns> Task<IEnumerable<dynamic>> QueryAsync(string sql, object param = null); /// <summary> /// 查询数据 /// </summary> /// <param name="sql"></param> /// <param name="param"></param> /// <returns></returns> IEnumerable<dynamic> QueryDynamic(string sql, object param = null); /// <summary> /// 查询数据集合 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sql"></param> /// <param name="param"></param> /// <returns></returns> IEnumerable<T> Query<T>(string sql, object param = null); /// <summary> /// 查询一条数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sql"></param> /// <param name="param"></param> /// <returns></returns> T QueryFirstOrDefault<T>(string sql, object param = null); /// <summary> /// 查询数据是否存在 /// </summary> /// <param name="sql"></param> /// <param name="param"></param> /// <returns></returns> bool QueryAny(string sql, object param = null); /// <summary> /// 执行非查询操作 /// </summary> /// <param name="sql"></param> /// <param name="param"></param> /// <returns></returns> int Execute(string sql, object param = null); /// <summary> /// /// </summary> /// <param name="sql"></param> /// <param name="param"></param> /// <returns></returns> object ExecuteScalar(string sql, object param = null); } /// <summary> /// /// </summary> public class DbRepository : IDbRepository { private readonly IConfiguration _configuration; /// <summary> /// 数据库从库连接字符串 /// </summary> public IDbConnection _dbConnectionSlave { get { return new MySqlConnection(_configuration["ConnectionStrings:SlaveConnectionRead"]); } } /// <summary> /// 数据库主库连接字符串 /// </summary> public IDbConnection _dbConnectionMaster { get { return new MySqlConnection(_configuration["ConnectionStrings:MasterConnection"]); } } /// <summary> /// /// </summary> /// <param name="configuration"></param> public DbRepository(IConfiguration configuration) { _configuration = configuration; } /// <summary> /// 异步查询数据 /// </summary> /// <param name="sql"></param> /// <param name="param"></param> /// <returns></returns> public async Task<IEnumerable<dynamic>> QueryAsync(string sql, object param = null) { using (_dbConnectionSlave) { return await _dbConnectionSlave.QueryAsync(sql, param); } } /// <summary> /// 查询数据 /// </summary> /// <param name="sql"></param> /// <param name="param"></param> /// <returns></returns> public IEnumerable<dynamic> QueryDynamic(string sql, object param = null) { using (_dbConnectionSlave) { return _dbConnectionSlave.Query(sql, param); } } /// <summary> /// 查询数据集合 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sql"></param> /// <param name="param"></param> /// <returns></returns> public IEnumerable<T> Query<T>(string sql, object param = null) { using (_dbConnectionSlave) { return _dbConnectionSlave.Query<T>(sql, param); } } /// <summary> /// 查询一条数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sql"></param> /// <param name="param"></param> /// <returns></returns> public T QueryFirstOrDefault<T>(string sql, object param = null) { using (_dbConnectionSlave) { return _dbConnectionSlave.QueryFirstOrDefault<T>(sql, param); } } /// <summary> /// 查询数据是否存在 /// </summary> /// <param name="sql"></param> /// <param name="param"></param> /// <returns></returns> public bool QueryAny(string sql, object param = null) { using (_dbConnectionSlave) { return _dbConnectionSlave.ExecuteScalar(sql, param) != null; } } /// <summary> /// 执行非查询操作 /// </summary> /// <param name="sql"></param> /// <param name="param"></param> /// <returns></returns> public int Execute(string sql, object param = null) { using (_dbConnectionMaster) { return _dbConnectionMaster.Execute(sql, param); } } /// <summary> /// /// </summary> /// <param name="sql"></param> /// <param name="param"></param> /// <returns></returns> public object ExecuteScalar(string sql, object param = null) { using (_dbConnectionSlave) { return _dbConnectionSlave.ExecuteScalar(sql, param); } } } }