zoukankan      html  css  js  c++  java
  • 反射实体类拼接SQL语句

    实体类基类:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Reflection;
      5 using System.Text;
      6 using System.Threading.Tasks;
      7 
      8 namespace Common
      9 {
     10     /// <summary>
     11     /// 实体类基类
     12     /// </summary>
     13     [Serializable]
     14     public abstract class EntityBase
     15     {
     16         /// <summary>
     17         /// 获取主键
     18         /// </summary>
     19         /// <returns></returns>
     20         public abstract string GetPrimaryKey();
     21         /// <summary>
     22         /// 获取INSERT语句
     23         /// </summary>
     24         /// <returns></returns>
     25         public string GetInsertSql()
     26         {
     27             try
     28             {
     29                 Type t = this.GetType();
     30                 string tableName = t.Name,pKey=this.GetPrimaryKey(),fields=string.Empty,values=string.Empty,temp=null;
     31                 foreach (PropertyInfo pi in t.GetProperties())
     32                 {
     33                     if (!pi.CanWrite) continue;
     34                     if (pi.Name.Equals(pKey))
     35                     {
     36                         continue;
     37                     }
     38                     temp = GetByTypeStr(pi);
     39                     fields += pi.Name + ",";
     40                     values += temp + ",";
     41                 }
     42                 return string.Format("Insert into {0}({1}) Values({2})", tableName, fields.TrimEnd(','), values.TrimEnd(','));
     43             }
     44             catch
     45             {
     46                 throw;
     47             }
     48         }
     49         /// <summary>
     50         /// 获取UPDATE语句
     51         /// </summary>
     52         /// <returns></returns>
     53         public string GetUpdateSql()
     54         {
     55             try
     56             {
     57                 Type t = this.GetType();
     58                 PropertyInfo[] pInfos = t.GetProperties();
     59                 string tableName = t.Name, pKey = this.GetPrimaryKey(), str_fields=string.Empty;
     60                 int keyIndex = -1;
     61                 for (int i = 0; i < pInfos.Length; i++)
     62                 {
     63                     if (pInfos[i].Name.Equals(this.GetPrimaryKey()))
     64                     {
     65                         keyIndex = i;
     66                         continue;
     67                     }
     68                     str_fields += pInfos[i].Name + " = " + GetByTypeStr(pInfos[i]) + ",";
     69                 }
     70                 return string.Format("Update {0} Set {1} Where {2} = {3}", tableName, str_fields.TrimEnd(','),this.GetPrimaryKey(), GetByTypeStr(pInfos[keyIndex]));
     71             }
     72             catch
     73             {
     74                 throw;
     75             }
     76         }
     77         /// <summary>
     78         /// 根据数据类型反射字段值
     79         /// </summary>
     80         /// <param name="pInfo">公共属性</param>
     81         /// <returns></returns>
     82         private string GetByTypeStr(PropertyInfo pInfo)
     83         {
     84             try
     85             {
     86                 string result_str = string.Empty;
     87                 Type t = pInfo.PropertyType;
     88                 object obj = pInfo.GetValue(this, null);
     89                 bool valueNull = StringUtil.isNullOrBlank(obj);
     90                 if (t == typeof(string))
     91                 {
     92                     result_str = valueNull ? "null" : "'" + obj.ToString().Replace("--","") + "'";
     93                 }
     94                 else if (t == typeof(System.Decimal) || t == typeof(System.Int16) || t == typeof(System.Int32) || t == typeof(System.Int64))
     95                 {
     96                     result_str = t.Name == "Nullable`1"&& valueNull ? "null" : obj.ToString();
     97                     //if ()
     98                     //{
     99 
    100                     //}
    101                     //else
    102                     //{
    103                     //    result_str = valueNull ? "0" : obj.ToString();
    104                     //}                    
    105                 }
    106                 else if(t==typeof(DateTime)||t.Name== "Nullable`1")
    107                 {
    108                     if (valueNull||DateTime.MinValue.Equals(obj)|| t.Name == "Nullable`1")
    109                     {
    110                         result_str = "null";
    111                     }
    112                     else
    113                     {
    114                         result_str = "'"+obj.ToString().Replace("", "-").Replace("", "-").Replace("", "")+"'";
    115                     }
    116                 }
    117                 return result_str;
    118             }
    119             catch
    120             {
    121                 throw;
    122             }
    123         }
    124     }
    125 }

    实体类:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using Common;
     7 
     8 namespace Model
     9 {
    10     public class MainModel:EntityBase
    11     {
    12         public decimal id { get; set; }
    13         public string title { get; set; }
    14         public string contents { get; set; }
    15         public string type { get; set; }
    16         public DateTime? date { get; set; }
    17         public string people { get; set; }
    18         public string picurl { get; set; }
    19         /// <summary>
    20         /// 设置主键
    21         /// </summary>
    22         /// <returns></returns>
    23         public override string GetPrimaryKey()
    24         {
    25             return "id";
    26         }
    27     }
    28 }

    调用:

    1             Model.MainModel model = new Model.MainModel();
    2             model.title = context.Request.Form["txtTitle"];
    3             model.people = context.Request.Form["txtName"];
    4             model.contents = context.Request.Form["txtContent"];
    5             string resSql = model.GetInsertSql();
  • 相关阅读:
    Thinking in Java Reading Note(9.接口)
    Thinking in java Reading Note(8.多态)
    Thinking in Java Reading Note(7.复用类)
    SQL必知必会
    Thinking in Java Reading Note(5.初始化与清理)
    Thinking in Java Reading Note(2.一切都是对象)
    鸟哥的Linux私房菜笔记(1.基础)
    Thinking in Java Reading Note(1.对象导论)
    CoreJava2 Reading Note(2:I/O)
    CoreJava2 Reading Note(1:Stream)
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/11154597.html
Copyright © 2011-2022 走看看