数据构造工具类(-)根据实体类生成sql

根据实体类生成sql(实体类字段与数据库保持一致)

实体类

 public class AccountEntity:IEntity
    {
        public int? ID { get; set; }
        public string Names { get; set; }
        public string TYPEID { get; set; }
        public string PRICE { get; set; }
        public string ISOUT { get; set; }
        public string Dates { get; set; }
        public string Remark { get; set; }

        /// <summary>
        /// 设置数据库表名称 
        /// </summary>
        /// <returns></returns>
        public string TableName()
        {
            return "bus_account";
        }
    }

反射生成Sql方法

        /// <summary>
        /// 通过反射得到sql
        /// </summary>
        /// <typeparam name="T">类名称</typeparam>
        /// <param name="t">类对象</param>
        /// <param name="WhereId">判断依据,新增还是修改</param>
        /// <returns></returns>
        public static string GetSql<T>(T t,string WhereId="ID")
        {
            var type = t.GetType(); //获取类型
            var pr=type.GetProperties();
            var where = "";
            var tableMethod = type.GetMethod("TableName");
            object obj = Activator.CreateInstance(type);
            var tableName = tableMethod.Invoke(obj, null);
            //INSERT INTO `bus_account` (ID,Names,TYPEID,PRICE,ISOUT,Dates,Remark) VALUES ('0', '早晨', '1', '22.22', '0', '', '这是一条备注信息,不知道他有多长,反正就是很长');

            var insertSqlStr = string.Format("INSERT INTO {0} ({1}) values ({2}) ", tableName, "{0}", "{1}");
            var insertColTemp = "";
            var insertValTemp = "";
            var isUpdate = false;

            //UPDATE BUS_ACCOUNT SET NAMES='123',TYPEID='2' WHERE ID='0'
            var updateSqlStr = string.Format("UPDATE {0} set {1} {2}", tableName, "{0}", "{1}");
            var updateSet = "";
            for (var i = 0; i < pr.Length; i++)
            {
                var name = pr[i].Name;
                var value = pr[i].GetValue(t, null);
                //和判断条件一致,并且值不为空,那么为修改语句
                if (name.Trim().ToLower() == WhereId.Trim().ToLower() && value.ToString().Trim().Length > 0)
                {
                    where = string.Format(" where {0}='{1}'", name, value);
                    isUpdate = true;
                }
                else
                {
                    insertColTemp += name + (i >= pr.Length - 1 ? "" : ",");
                    insertValTemp += string.Format("'{0}'", value) + (i >= pr.Length - 1 ? "" : ",");
                    updateSet += string.Format("{0}='{1}'", name, value) + (i >= pr.Length - 1 ? "" : ","); ;
                }
            }
            return isUpdate ? string.Format(updateSqlStr, updateSet, @where) : string.Format(insertSqlStr, insertColTemp, insertValTemp);
        }

调用

            var account = JsonHelper.DeserializeJsonToObject<AccountEntity>(json);
            var sql = GetSql<AccountEntity>(account);



猜你喜欢

转载自blog.csdn.net/qq_28254093/article/details/80045137