泛型缓存(Generic)

在 2019-10-21 2019-10-21 发表的泛型当中我们说过一个很重要的点就是不同的泛型类,进入的时候其实在后台的时候创建了不同的类,所以进入的类其实是不同的由此我们可以想想出一种方法 来做缓存

namespace YZMDAL
{
    public class SQLBuilder<T> where T: BaseModel
    {
        private static string FindOne = null;
        private static string insertSql = null;
        private static string updatedb = null;
        private static string Deletesql = null;
        /// <summary>
        /// 无参构造器
        /// </summary>
        static SQLBuilder()
        {
            {
                Type type = typeof(T);//获取类型
                string columnString = string.Join(",", type.GetProperties().Select(x => $"`{x.GetColumnMappingName()}`"));
                FindOne = $@"select {columnString} from  `{type.GetMappingName()}` where Id=@id";//type.GetMappingName()特性的语法糖
            }
            {
                Type type = typeof(T);//获取类型
                string columnString = string.Join(",", type.GetProperties().FilterKey().Select(x => $"`{x.GetColumnMappingName()}`"));//出去主键Id
                //遍历属性值
                string  ValuesString = string.Join(",", type.GetProperties().FilterKey().Select(x => $"@{x.GetColumnMappingName()}"));
                insertSql = $@"Insert into `{type.Name}`({columnString}) values({ValuesString})";
            }
            {
                Type type = typeof(T);
                //string Columnsql = string.Join(",", type.GetProperties().FilterKey().Select(x => $"{x.Name}=$'{x.GetValue(t)??DBNull.Value }'"));//为防止sql注入
                string Columnsql = string.Join(",", type.GetProperties().FilterKey().Select(x => $"`{x.Name}`=@{x.Name}"));//防止sql注入并使用sqlparament
                updatedb = $"UPDATE  `{type.Name}` SET {Columnsql} where Id=@Id ";
            }
            {
                //delete 方法
                Type type = typeof(T);
                //string Columnsql = string.Join(",", type.GetProperties().FilterKey().Select(x => $"{x.Name}=$'{x.GetValue(t)??DBNull.Value }'"));//为防止sql注入
                string Columnsql = string.Join(",", type.GetProperties().FilterKey().Select(x => $"{x.Name}=@{x.Name}"));//防止sql注入并使用sqlparament
                Deletesql = $" delete  from `{type.Name}`  where  Id = @Id ";
            }
        }

        /// <summary>
        /// 对外提供的接口
        /// </summary>
        /// <param name="sqlType"></param>
        /// <returns></returns>
        public static string GetSql (sqlType sqlType)
        {
            switch (sqlType)
            {
                case sqlType.FindOne:
                    return FindOne;
                case sqlType.insertSql:
                    return insertSql;
                case sqlType.updatedb:
                    return updatedb;
                case sqlType.Delete:
                    return Deletesql;
                default:
                    throw new Exception("我也不知道该写啥");
            }
        }
        /// <summary>
        /// 枚举传参
        /// </summary>
        public enum sqlType
        {
            FindOne  ,
            insertSql,
            updatedb,
            Delete
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值