静态缓存是利用普通泛型类的静态字段来实现的,因为是泛型类 ,指定类型后会产生相应的静态字段-->值得注意的是要在静态构造函数中初始化字段
public class CacheSql<T> where T : BaseModel
{
public static string AddSqlStr { get; set; }
public static string DeleteSqlStr { get; set; }
public static string UpdateSqlStr { get; set; }
public static string QuerrySqlStr { get; set; }
public static string QuerryListSqlStr { get; set; }
static CacheSql()
{
Type type = typeof(T);
string colums = string.Join(",", type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly).Select(p => $"[{p.Name}]"));
string values = string.Join(",", type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly).Select(p => $"@{p.Name}"));
string sql = $"insert {type.Name} ({colums}) values ({values}) ";
AddSqlStr = sql;
sql = $" delete from {type.Name} where ID = @ID";
DeleteSqlStr = sql;
sql = $"select {string.Join(",", type.GetProperties().Select(p => $" [{ p.Name}]"))} from [{type.Name}] ";
QuerryListSqlStr = sql;
sql = $"select {string.Join(",", type.GetProperties().Select(p => $" [{ p.Name}]"))} from [{type.Name}] where id = @ID";
QuerrySqlStr = sql;
var setCol = string.Join(" ", type.GetProperties(BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Instance).Select(p => $"{p.Name }:@{p.Name}"));
sql = $"upsate {type.Name} set {setCol} where id = @ID";
UpdateSqlStr = sql;
}
}