• 重构我的CMS系统,增加ORM



    Web层,采用WebService + Ajax (支持Web,WAP)

    Model实体层,略

    SystemFramework层,主要是载入配置信息,资源文件等

    CommonTools通用工具Util等类

    BLL业务层------------------------------------------------------------------------------------------------------------------------

    /// <summary>
     /// 逻辑业务层 User
     /// </summary>
     public class SysuserService
     {
            private static readonly ISysuser dal = DataAccess.CreateSysuser();

      #region  成员方法

            public SysuserService()
      {}

      /// <summary>
      /// 增加一条数据
      /// </summary>
            public bool Save(Yesun.Model.Sysuser model)
      {
       return dal.Save(model);
      }

      /// <summary>
      /// 修改一条数据
      /// </summary>
            public bool Update(Yesun.Model.Sysuser model)
      {
       return dal.Update(model);
      }

            /// <summary>
            /// 得到一个对象实体
            /// </summary>
            public Yesun.Model.Sysuser GetModel(Guid id)
            {
                return dal.GetModel(id);
            }

            /// <summary>
            /// 得到一个对象实体
            /// </summary>
            public Yesun.Model.Sysuser GetModel(string id)
            {
                return dal.GetModel(new Guid(id));
            }

            /// <summary>
            /// 获得数据列表
            /// </summary>
            public Yesun.Model.SqlPage<Yesun.Model.Sysuser> GetList()
            {
                return dal.GetList("", "", "", "", 1, -1);
            }

            /// <summary>
            /// 获得数据列表
            /// </summary>
            public Yesun.Model.SqlPage<Yesun.Model.Sysuser> GetList(int pageid, int pagesize)
            {
                return dal.GetList("", "", "", "", pageid, pagesize);
            }

            /// <summary>
            /// 获得数据列表
            /// </summary>
            public Yesun.Model.SqlPage<Yesun.Model.Sysuser> GetList(string where, int pageid, int pagesize)
            {
                return dal.GetList("", "", "", where, pageid, pagesize);
            }

            /// <summary>
            /// 获得数据列表
            /// </summary>
            public Yesun.Model.SqlPage<Yesun.Model.Sysuser> GetList(string field, string where, int pageid, int pagesize)
            {
                return dal.GetList("", field, "", where, pageid, pagesize);
            }

            /// <summary>
            /// 获得数据列表
            /// </summary>
            public Yesun.Model.SqlPage<Yesun.Model.Sysuser> GetList(string pk, string fields, string sort, string where, int pageid, int pagesize)
            {
                return dal.GetList(pk, fields, sort, where, pageid, pagesize);
            }

      /// <summary>
      /// 删除N条数据
      /// </summary>
      public bool Delete(string delid)
      {
       return dal.Delete(delid);
      }

      #endregion  成员方法
     }

    DAL层,最核心的----------------------------------- --------------加入泛型,ORM-------------------------------------------------- -------------------------------------------------------------

    namespace Yesun.SqlDAL
    {
     /// <summary>
     /// 通用数据访问类
     /// </summary>
        public class DAL<T> : IDAL<T>
     {
      #region  成员方法

            private readonly ObjectMapHelper<T> objectMapHelper = new ObjectMapHelper<T>();
            private TableMap tableMap;
            private List<FieldMap> arrFieldMap;
            public DAL()
      {
                tableMap = objectMapHelper.GetTableMap();
                arrFieldMap = objectMapHelper.GetFieldMap();
            }

      /// <summary>
      /// 增加一条数据
      /// </summary>
      public bool Save(T t)
      {
                //存储过程模式
                StringBuilder cmdText = new StringBuilder("usp_"+ tableMap.TableName +"_Save");
                cmdText.Append(" ");//必须
                object[] cmdParams = new object[arrFieldMap.Count];
                int i = 0;
                foreach (FieldMap field in arrFieldMap)
                {
                    if (i == arrFieldMap.Count - 1)
                        cmdText.Append("@" + field.Column);
                    else
                        cmdText.Append("@" + field.Column + ",");

                    cmdParams[i] = t.GetType().GetProperty(field.MemberName).GetValue(t, null);
                    i++;
                }
                if (SqlDataBase.ExecuteNonQuery(CommandType.StoredProcedure, cmdText.ToString(), cmdParams) > 0)
                    return true;
                else
                    return false;
            }

      /// <summary>
      /// 修改一条数据
      /// </summary>
      public bool Update(T t)
      {
                //存储过程模式
                StringBuilder cmdText = new StringBuilder("usp_" + tableMap.TableName + "_Update");
                cmdText.Append(" ");//必须
                object[] cmdParams = new object[arrFieldMap.Count];
                int i = 0;
                foreach (FieldMap field in arrFieldMap)
                {
                    if (i == arrFieldMap.Count - 1)
                        cmdText.Append("@" + field.Column);
                    else
                        cmdText.Append("@" + field.Column + ",");

                    cmdParams[i] = t.GetType().GetProperty(field.MemberName).GetValue(t, null);
                    i++;
                }
                if (SqlDataBase.ExecuteNonQuery(CommandType.StoredProcedure, cmdText.ToString(), cmdParams) > 0)
                    return true;
                else
                    return false;
      }

            /// <summary>
            /// 得到一个对象实体
            /// </summary>
            public T GetModel(Guid id)
            {
                T t = System.Activator.CreateInstance<T>();//创建实例
                DataTable dt = SqlDataBase.ExecuteDataTable(CommandType.StoredProcedure, "usp_" + tableMap.TableName + "_GetByID @id", id);
                if (dt.Rows.Count == 0)
                    return default(T);
                t = objectMapHelper.DataTableToObject(dt)[0];
                return t;
            }
           
      /// <summary>
      /// 获得数据列表
      /// </summary>
            public Yesun.Model.SqlPage<T> GetList(string pk, string fields, string sort, string where, int pageid, int pagesize)
      {
                SqlPage<T> sqlpage = new SqlPage<T>();
                string primaryKey = objectMapHelper.GetPrimaryKey();

                if (pageid < 1) pageid = 1;
                if (pagesize < 0) pagesize = 1000000;
                if (pk == null || pk == "") pk = primaryKey;
                if (fields == null || fields == "")
                {
                    foreach (FieldMap field in arrFieldMap)
                    {
                        fields += field.Column + ",";
                    }
                }
                if (fields.EndsWith(","))
                    fields = fields.Remove(fields.Length - 1);
                if (sort == null || sort == "") sort = primaryKey;

                DataTable dt = new DataTable();
                SqlParameter[] parms = new SqlParameter[]{
                  new SqlParameter("@PKs",SqlDbType.NVarChar,100),
                  new SqlParameter("@Tables",SqlDbType.NVarChar,100),
                  new SqlParameter("@Fields",SqlDbType.NVarChar,500),
                  new SqlParameter("@Sort",SqlDbType.NVarChar,100),
                  new SqlParameter("@Where",SqlDbType.NVarChar,4000),
                  new SqlParameter("@CurrentPage",SqlDbType.Int),
                  new SqlParameter("@PageSize",SqlDbType.Int),
                  new SqlParameter("@RecordCount",SqlDbType.Int)
                   };
                parms[0].Value = pk;
                parms[1].Value = tableMap.TableName;
                parms[2].Value = fields;
                parms[3].Value = sort;
                parms[4].Value = where;
                parms[5].Value = pageid;
                parms[6].Value = pagesize;
                parms[7].Direction = ParameterDirection.Output;

                dt = Yesun.DbUtility.SqlHelper.ExecuteDataset(Yesun.DbUtility.DbConfig.ConnectionString, CommandType.StoredProcedure, "USP_GetListByPage", parms).Tables[0];
                sqlpage.oList = objectMapHelper.DataTableToObject(dt);
                sqlpage.RecordCount = (int)parms[7].Value;
                if (sqlpage.RecordCount % pagesize == 0)
                    sqlpage.RecordPage = sqlpage.RecordCount / pagesize;
                else
                    sqlpage.RecordPage = (int)Math.Ceiling((double)sqlpage.RecordCount / pagesize);

                return sqlpage;

      }

      /// <summary>
      /// 删除N条数据
      /// </summary>
      public bool Delete(string delid)
      {
                //GUID删除和INT型删除不相同
                delid = delid.Replace(",", "','");
                string SQL = "DELETE FROM "+ tableMap.TableName +" WHERE id IN ('" + delid + "')";
                if (SqlDataBase.ExecuteNonQuery(CommandType.Text, SQL, null) > 0)
                    return true;
                else
                    return false;
      }

      #endregion  成员方法
     }
    }

    Sysuser数据库操作,继承DAL,自己可以扩展其他数据库操作,继承接口中的默认4种数据库操作

    namespace Yesun.SqlDAL
    {
     /// <summary>
     /// 数据访问类User
     /// </summary>
     public class Sysuser : DAL<Yesun.Model.Sysuser> , ISysuser
     {
     }
    }

    IDAL层--------------------------------------- ------------------------------------------------------------------------------------------------------------------

    namespace Yesun.IDAL
    {
        /// <summary>
        /// 接口层IDAL, 通用方法, 范型
        /// </summary>
        public interface IDAL<T>
        {
         #region  成员方法

         /// <summary>
         /// 增加一条数据
         /// </summary>
         bool Save(T t);

         /// <summary>
         /// 修改一条数据
         /// </summary>
         bool Update(T t);

         /// <summary>
         /// 得到一个对象实体
         /// </summary>
         T GetModel(Guid id);

         /// <summary>
         /// 获得数据列表
         /// </summary>
         Yesun.Model.SqlPage<T> GetList(string pk, string fields, string sort, string where, int pageid, int pagesize);

         /// <summary>
         /// 删除N条数据
         /// </summary>
         bool Delete(string delid);

         #endregion  成员方法
        }
    }

    ISysuser.cs基层IDAL,方便自行扩展

    /// <summary>
     /// 接口层ISysuser 的摘要说明。
     /// </summary>
     public interface ISysuser : IDAL<Yesun.Model.Sysuser>
     {
     }

    DALFaction工厂-------------------------------- -----------------------------------------------------------------------------------------------------------------

    public sealed class DataAccess
     {
            private static readonly string path = ConfigurationManager.AppSettings["DAL"];
      /// <summary>
      /// 创建对象或从缓存获取
      /// 注意:如果这里反射不成功,请分析下面原因:1.每一层是否是独立的程序集 2.请检查数据层是否实现了接口 3.请检查程序集名称和命名空间不一致,右键DAL项目,察看程序集名称和名字空间是否为YESUN.DAL格式
      /// </summary>
      public static object CreateObject(string path,string CacheKey)
      {
       System.Web.Caching.Cache objCache = System.Web.HttpRuntime.Cache;
       object objType = objCache[CacheKey];
       if (objType == null)
       {
        try
        {
         objType = Assembly.Load(path).CreateInstance(CacheKey);
         objCache.Insert(CacheKey, objType);// 写入缓存
        }
        catch(Exception ex)
        {
                        //记录错误日志
                        Console.Write(ex.Message);
                        Console.Write(ex.StackTrace);
                    }
       }
       return objType;
      }
            /// <summary>
            /// 创建cms_admin数据层接口
            /// </summary>
            public static Yesun.IDAL.ISysuser CreateSysuser()
            {
                string CacheKey = path + ".Sysuser";
                object objType = CreateObject(path, CacheKey);
                return (ISysuser)objType;
            }
        }

    DbUtility,ORM略。。。







  • 相关阅读:
    Educational Codeforces Round 80 (Rated for Div. 2)
    2020 CCPC Wannafly Winter Camp
    Codeforces Round #613 (Div. 2)
    Codeforces Round #612 (Div. 2)
    Hello 2020
    Good Bye 2019
    Codeforces Round #590 (Div. 3)
    依赖注入
    Spring 拦截器
    rsync服务端一键安装rsync脚本(非源码)
  • 原文地址:https://www.cnblogs.com/yesun/p/674112.html
Copyright © 2020-2023  润新知