自定义ORMapping―动态生成SQL语句(二)

2015-01-27 05:59:43 · 作者: · 浏览: 25
tring In = "IN"; } /// /// 是否有单引号 /// public enum ORFieldValueHaveCommaEnum { False = 0, True = 1 }; 定义这些常量和枚举是为了帮助我们生成相应SQL语句时,使用


定义Where和Order生成对象

    public abstract class SqlClauseBuilder
    {
        //便于之后的扩展:ToSqlString(ISqlBuilder sqlBuilder)
        public abstract string ToSqlString();
    }

    ///  /// 拼接Where后的条件语句 /// 
    public class WhereSqlClauseBuilder : SqlClauseBuilder
    {
        private Dictionary
   
     dicSqlConditions = new Dictionary
    
     (); /// 
      /// 添加条件 ///  /// 
     字段名 /// 
     字段值 /// 
     比较运算符 /// 
     连接符(and or none) public void Append(string strFieldName, string strFieldValue, string strCompareOperation = CompareOperationConst.EqualTo, string strLogicOperation = LogicOperatorConst.None) { SqlConditionItem item = new SqlConditionItem(); item.SetOperationItem(strFieldName, strFieldValue, strCompareOperation); dicSqlConditions.Add(item, strLogicOperation); } /// 
      /// 生成Sql语句 ///  /// 
      public override string ToSqlString() { StringBuilder sb = new StringBuilder(); foreach (var item in dicSqlConditions) { sb.Append(item.Key.GetOperationItem() + " " + item.Value); } return sb.ToString(); } } /// 
      /// 单个where项 ///  public class SqlConditionItem { private string strFieldName; private string strFieldValue; private string strCompareOperation; /// 
      /// 以字符串的形式获得条件 ///  /// 
     
      单个条件的字符串
      public string GetOperationItem() { StringBuilder sb = new StringBuilder(); sb.Append(" " + strFieldName + " " + strCompareOperation + " " + strFieldValue); return sb.ToString(); } /// 
      /// 赋值 ///  /// 
     字段名 /// 
     字段值 /// 
     比较运算符 public void SetOperationItem(string strFieldName, string strFieldValue, string strCompareOperation) { this.strFieldName = strFieldName; this.strCompareOperation = strCompareOperation; this.strFieldValue = strFieldValue; } } /// 
      /// 拼接OrderBy后的条件语句 ///  public class OrderBySqlClauseBuilder : SqlClauseBuilder { private Dictionary
     
       dicOrderConditions = new Dictionary
      
       (); public void AppendItem(string strDataField, string strFieldSort = FieldSortConst.Asc) { if (dicOrderConditions.Count > 0) { dicOrderConditions.Add(", " + strDataField, strFieldSort); } else { dicOrderConditions.Add(strDataField, strFieldSort); } } public override string ToSqlString() { StringBuilder sb = new StringBuilder(); foreach (var item in dicOrderConditions) { sb.Append(item.Key + " " + item.Value); } return sb.ToString(); } }
      
     
    
   
使用这些对象帮助我们生成相应的SQL语句中的where和order部分,当然,也可以定义其他的


定义整合类

整合类是将上述运用起来形成的一个整体,从而实现增删该查这些功能,具体如下

    public class DataManager
   
     where T : class,new() { #region 增加 /// 
     /// 添加 ///  /// 
    实体对象 /// 
    
     SQL语句
     public static int Add(T obj) { StringBuilder sb = new StringBuilder(); string strTableName = GetTableName(); string strFieldNames; string strFieldValues; GetInsertFieldAndValue(obj, out strFieldNames, out strFieldValues); sb.AppendFormat("insert into {0}({1}) values({2})", strTableName, strFieldNames, strFieldValues); return SQLHelper.GetInstance().ExecuteNonQuery(sb.ToString(), CommandType.Text); } #endregion #region 删除 /// 
     /// 全部删除 ///  /// 
    这个类型的对象 /// 
    
     操作影响行数
     public static int Delete(T obj) { return Delete(obj, null); } /// 
     /// 带有条件的删除 ///  /// 
    被删除对象 /// 
    条件 /// 
    
     操作影响行数
     public static int Delete(T obj, Action
    
      whereSqlClauseBuilder) { StringBuilder sb = new StringBuilder(); string strTableName = GetTableName(); WhereSqlClauseBuilder w = new WhereSqlClauseBuilder(); if (whereSqlClauseBuilder != null) { whereSqlClauseBuilder(w); sb.AppendFormat("delet