zoukankan      html  css  js  c++  java
  • .net core

     需要引入包:

    Dapper
    Dapper.Contrib
    MySql.Data
    

      

    接口:

    public interface IMySqlDapperContext : IDisposable
    {
        /// <summary>
        /// MySql连接对象
        /// </summary>
        IDbConnection MySqlConnection { get; }
    }
    

      

    /// <summary>
    /// 数据库CRUD操作
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public interface IMySqlRepository<T> where T : class
    {
        /// <summary>
        /// 连接
        /// </summary>
        IDbConnection Connection { get; }
    
        /// <summary>
        /// 上下文
        /// </summary>
        IMySqlDapperContext Context { get; }
    
    
        /// <summary>
        /// 根据主键获取数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <param name="transaction"></param>
        /// <param name="commandTimeout"></param>
        /// <returns></returns>
        T GetByKey<T>(object key, IDbTransaction transaction = null, int? commandTimeout = null) where T : class;
    
        /// <summary>
        /// 添加数据
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="transaction"></param>
        /// <param name="commandTimeout"></param>
        /// <returns></returns>
        long Add(T entity, IDbTransaction transaction = null, int? commandTimeout = null);
    
        /// <summary>
        /// 
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="transaction"></param>
        /// <param name="commandTimeout"></param>
        void Update(T entity, IDbTransaction transaction = null, int? commandTimeout = null);
    
        /// <summary>
        /// 删除单条数据
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="transaction"></param>
        /// <param name="commandTimeout"></param>
        void Remove(T entity, IDbTransaction transaction = null, int? commandTimeout = null);
    
        /// <summary>
        /// 根据主键获取数据
        /// </summary>
        /// <param name="key"></param>
        /// <param name="transaction"></param>
        /// <param name="commandTimeout"></param>
        /// <returns></returns>
        T GetByKey(object key, IDbTransaction transaction = null, int? commandTimeout = null);
    
        /// <summary>
        /// 获取所有数据
        /// </summary>
        /// <param name="transaction"></param>
        /// <param name="commandTimeout"></param>
        /// <returns></returns>
        IEnumerable<T> GetAll(IDbTransaction transaction = null, int? commandTimeout = null);
    
        /// <summary>
        /// 根据条件获取数据列表
        /// </summary>
        /// <param name="where"></param>
        /// <param name="order"></param>
        /// <param name="transaction"></param>
        /// <param name="commandTimeout"></param>
        /// <returns></returns>
        IEnumerable<T> GetBy(object where = null, object order = null, IDbTransaction transaction = null, int? commandTimeout = null);
    
        IEnumerable<T> GetBy<T>(object sql = null, object param = null, IDbTransaction transaction = null, int? commandTimeout = null) where T : class;
    
        T QuerySingleOrDefault<T>(string sql = null, object param = null, IDbTransaction transaction = null, int? commandTimeout = null) where T : class;
    
        /// <summary>
        /// 查询数据列表
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="transaction"></param>
        /// <param name="commandTimeout"></param>
        /// <returns></returns>
        IEnumerable<dynamic> Query(string sql, IDbTransaction transaction = null, int? commandTimeout = null);
            
        /// <summary>
        /// 查询数据列表
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="transaction"></param>
        /// <param name="commandTimeout"></param>
        /// <returns></returns>
        IEnumerable<T> Query<T>(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null) where T : class;
            
        /// <summary>
        /// 查询数据列表
        /// </summary>
        /// <typeparam name="TFirst"></typeparam>
        /// <typeparam name="TSecond"></typeparam>
        /// <typeparam name="TReturn"></typeparam>
        /// <param name="sql"></param>
        /// <param name="map"></param>
        /// <param name="transaction"></param>
        /// <param name="commandTimeout"></param>
        /// <returns></returns>
        IEnumerable<TReturn> Query<TFirst, TSecond, TReturn>(string sql, Func<TFirst, TSecond, TReturn> map, object param = null, IDbTransaction transaction = null, string splitOn = "Id", int? commandTimeout = null, CommandType? commandType = null);
    
    
        IEnumerable<TReturn> Query<TFirst, TSecond, TThird, TReturn>(string sql, Func<TFirst, TSecond, TThird, TReturn> map, object param = null, IDbTransaction transaction = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = null, CommandType? commandType = null);
    
        IEnumerable<TReturn> Query<TFirst, TSecond, TThird, TFourth, TFifth, TReturn>(string sql, Func<TFirst, TSecond, TThird, TFourth, TFifth, TReturn> map, object param = null, IDbTransaction transaction = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = null, CommandType? commandType = null);
    
        IEnumerable<TReturn> Query<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TReturn>(string sql, Func<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TReturn> map, object param = null, IDbTransaction transaction = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = null, CommandType? commandType = null);
    
        IEnumerable<TReturn> Query<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TSeventh, TReturn>(string sql, Func<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TSeventh, TReturn> map, object param = null, IDbTransaction transaction = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = null, CommandType? commandType = null);
        /// <summary>
        /// 查询数据列表
        /// </summary>
        /// <typeparam name="TFirst"></typeparam>
        /// <typeparam name="TSecond"></typeparam>
        /// <typeparam name="TThird"></typeparam>
        /// <typeparam name="TFourth"></typeparam>
        /// <typeparam name="TReturn"></typeparam>
        /// <param name="sql"></param>
        /// <param name="map"></param>
        /// <param name="param"></param>
        /// <param name="transaction"></param>
        /// <param name="splitOn"></param>
        /// <param name="commandTimeout"></param>
        /// <param name="commandType"></param>
        /// <returns></returns>
        IEnumerable<TReturn> Query<TFirst, TSecond, TThird, TFourth, TReturn>(string sql, Func<TFirst, TSecond, TThird, TFourth, TReturn> map, object param = null, IDbTransaction transaction = null, string splitOn = "Id", int? commandTimeout = null, CommandType? commandType = null);
    
        /// <summary>
        /// 执行sql
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="transaction"></param>
        /// <param name="commandTimeout"></param>
        /// <returns></returns>
        int Excute(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null);
    
        /// <summary>
        /// 返回单个参数
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="transaction"></param>
        /// <param name="commandTimeout"></param>
        /// <returns></returns>
        object ExcuteScalar(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null);
    }
    

      

    实现:

        /// <summary>
        /// 连接字符串
        /// </summary>
        private string ConnectionString;
    
        /// <summary>
        /// 连接
        /// </summary>
        private IDbConnection Connection;
    
        /// <summary>
        /// 构造函数注入IConfiguration
        /// </summary>
        /// <param name="configuration"></param>
        public MySqlDapperContext(IConfiguration configuration)
        {
            ConnectionString = configuration["AppSetting:MySqlConnectionString"];
        }
    
        public IDbConnection MySqlConnection {
            get {
                if (Connection == null || Connection.State == ConnectionState.Closed)
                {
                    Connection = new MySqlConnection(ConnectionString);
                }
                if (Connection.State == ConnectionState.Closed)
                {
                    Connection.Open();
                }
                return Connection;
            }
        }
    
        /// <summary>
        /// 释放链接
        /// </summary>
        public void Dispose()
        {
            if (Connection != null && Connection.State == ConnectionState.Open)
            {
                Connection.Close();
            }
        }
    }
    

      

    public class MySqlRepository<T> : IMySqlRepository<T> where T : class
    {
        /// <summary>
        /// 存储appsetting.json里的数据库连接字符串
        /// </summary>
        private string ConnectionString;
    
        public IMySqlDapperContext Context { get; private set; }
    
        public IDbConnection Connection
        {
            get
            {
                return Context.MySqlConnection;
            }
        }
    
        public MySqlRepository(IMySqlDapperContext context)
        {
            Context = context;
            ConnectionString = context.MySqlConnection.ConnectionString;
        }
    
        public virtual T GetByKey<T>(object id, IDbTransaction transaction = null, int? commandTimeout = null) where T : class
        {
            if (id == null)
            {
                throw new ArgumentNullException("id");
            }
            return Connection.Get<T>(id, transaction: transaction, commandTimeout: commandTimeout);
        }
    
        public long Add(T entity, IDbTransaction transaction = null, int? commandTimeout = null)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity", "Add to DB null entity");
            }
            var res = Connection.Insert(entity, transaction: transaction, commandTimeout: commandTimeout);
            return res;
        }
    
        public virtual void Update(T entity, IDbTransaction transaction = null, int? commandTimeout = null)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity", "Update in DB null entity");
            }
            Connection.Update(entity, transaction: transaction, commandTimeout: commandTimeout);
        }
    
        public virtual void Remove(T entity, IDbTransaction transaction = null, int? commandTimeout = null)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity", "Remove in DB null entity");
            }
            Connection.Delete(entity, transaction: transaction, commandTimeout: commandTimeout);
        }
    
        public virtual T GetByKey(object id, IDbTransaction transaction = null, int? commandTimeout = null)
        {
            if (id == null)
            {
                throw new ArgumentNullException("id");
            }
            return Connection.Get<T>(id, transaction: transaction, commandTimeout: commandTimeout);
        }
    
        public virtual IEnumerable<T> GetAll(IDbTransaction transaction = null, int? commandTimeout = null)
        {
            return Connection.GetAll<T>(transaction: transaction, commandTimeout: commandTimeout);
        }
    
    
        public virtual T QuerySingleOrDefault<T>(string sql = null, object param = null, IDbTransaction transaction = null, int? commandTimeout = null) where T : class
        {
            return Connection.QuerySingleOrDefault<T>(sql, param, transaction: transaction, commandTimeout: commandTimeout);
        }
    
        public virtual IEnumerable<T> GetBy(object where = null, object order = null, IDbTransaction transaction = null, int? commandTimeout = null)
        {
            return Connection.Query<T>(where.ToString(), commandTimeout: commandTimeout);
        }
    
        public virtual IEnumerable<T> GetBy<T>(object sql = null, object param = null, IDbTransaction transaction = null, int? commandTimeout = null) where T : class
        {
            return Connection.Query<T>(sql.ToString(), param: param, transaction: transaction, commandTimeout: commandTimeout);
        }
    
    
        public IEnumerable<dynamic> Query(string sql, IDbTransaction transaction = null, int? commandTimeout = null)
        {
            return Connection.Query<dynamic>(sql);
        }
    
        public IEnumerable<T> Query<T>(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null) where T : class
        {
            return Connection.Query<T>(sql, param: param, transaction: transaction);
        }
    
        public IEnumerable<TReturn> Query<TFirst, TSecond, TReturn>(string sql, Func<TFirst, TSecond, TReturn> map, object param = null, IDbTransaction transaction = null, string splitOn = "Id", int? commandTimeout = null, CommandType? commandType = null)
        {
            return Connection.Query<TFirst, TSecond, TReturn>(sql, map, param: param, transaction: transaction, splitOn: splitOn, commandType: commandType);
        }
        public IEnumerable<TReturn> Query<TFirst, TSecond, TThird, TReturn>(string sql, Func<TFirst, TSecond, TThird, TReturn> map, object param = null, IDbTransaction transaction = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = null, CommandType? commandType = null)
        {
            return Connection.Query<TFirst, TSecond, TThird, TReturn>(sql, map, param: param, transaction: transaction, splitOn: splitOn, commandType: commandType);
        }
    
        public IEnumerable<TReturn> Query<TFirst, TSecond, TThird, TFourth, TReturn>(string sql, Func<TFirst, TSecond, TThird, TFourth, TReturn> map, object param = null, IDbTransaction transaction = null, string splitOn = "Id", int? commandTimeout = null, CommandType? commandType = null)
        {
            return Connection.Query<TFirst, TSecond, TThird, TFourth, TReturn>(sql, map, param: param, transaction: transaction, splitOn: splitOn, commandType: commandType);
        }
    
        public IEnumerable<TReturn> Query<TFirst, TSecond, TThird, TFourth, TFifth, TReturn>(string sql, Func<TFirst, TSecond, TThird, TFourth, TFifth, TReturn> map, object param = null, IDbTransaction transaction = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = null, CommandType? commandType = null)
        {
            return Connection.Query<TFirst, TSecond, TThird, TFourth, TFifth, TReturn>(sql, map, param: param, transaction: transaction, splitOn: splitOn, commandType: commandType);
    
        }
        public IEnumerable<TReturn> Query<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TReturn>(string sql, Func<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TReturn> map, object param = null, IDbTransaction transaction = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = null, CommandType? commandType = null)
        {
            return Connection.Query<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TReturn>(sql, map, param: param, transaction: transaction, splitOn: splitOn, commandType: commandType);
        }
        public IEnumerable<TReturn> Query<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TSeventh, TReturn>(string sql, Func<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TSeventh, TReturn> map, object param = null, IDbTransaction transaction = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = null, CommandType? commandType = null)
        {
            return Connection.Query<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TSeventh, TReturn>(sql, map, param: param, transaction: transaction, splitOn: splitOn, commandType: commandType);
        }
    
        public int Excute(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null)
        {
            return Connection.Execute(sql, param: param, transaction: transaction);
        }
        public object ExcuteScalar(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null)
        {
            return Connection.ExecuteScalar(sql, param: param, transaction: transaction, commandTimeout: commandTimeout);
        }
    
        public GridReader QueryMultiple(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null)
        {
    
            return Connection.QueryMultiple(sql, param: param, transaction: transaction, commandTimeout: commandTimeout);
        }
    }
    

      

  • 相关阅读:
    webpack.DefinePlugin
    webpack-dev-server配置指南(使用webpack3.0)
    Eclipse配色方案插件
    解决Sublime Text 3中文显示乱码问题(转)
    Java连接SqlServer2008数据库
    [转]java中判断字符串是否为数字的三种方法
    VS2008 SP1 安装卡在 VS90sp1-KB945140-X86-CHS的解决方法
    Python获取桌面路径
    关于fdisk命令
    socket 错误之:OSError: [WinError 10057] 由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。
  • 原文地址:https://www.cnblogs.com/gygtech/p/13615087.html
Copyright © 2011-2022 走看看