Exemplo n.º 1
0
        public override IEnumerable <T> GetBySkipTake <T>(int skip, int take, string where = null, object param = null, string returnFields = null, string orderBy = null)
        {
            DapperSqls sqls = GetDapperSqls(typeof(T));

            if (returnFields == null)
            {
                returnFields = sqls.AllFields;
            }

            if (orderBy == null)
            {
                if (!string.IsNullOrEmpty(sqls.KeyName))
                {
                    orderBy = string.Format("ORDER BY [{0}]", sqls.KeyName);
                }
                else
                {
                    orderBy = string.Format("ORDER BY [{0}]", sqls.AllFieldList.First());
                }
            }

            string sql = string.Format("SELECT {0} FROM [{1}] {2} {3} LIMIT {4},{5}", returnFields, sqls.TableName, where, orderBy, skip, take);

            return(Query <T>(sql, param));
        }
Exemplo n.º 2
0
        public override int InsertIfExistUpdate <T>(T model, string updateFields = null, bool allowUpdate = true)
        {
            DapperSqls sqls = GetDapperSqls(typeof(T));

            if (string.IsNullOrEmpty(sqls.KeyName))
            {
                throw new Exception("表[" + sqls.TableName + "]没有主键");
            }

            string sqlTotal = string.Format("SELECT COUNT(1) FROM [{0}] WHERE [{1}]=@{1}", sqls.TableName, sqls.KeyName);
            int    total    = ExecuteScalar <int>(sqlTotal, model);

            if (total > 0) //Exists
            {
                if (allowUpdate)
                {
                    if (string.IsNullOrEmpty(updateFields))
                    {
                        return(Update(model));
                    }
                    else
                    {
                        return(Update(model, updateFields));
                    }
                }
                return(0);
            }
            else
            {
                return(Insert(model));
            }
        }
Exemplo n.º 3
0
        public override int GetCount <T>(string where = null, object param = null)
        {
            DapperSqls sqls = GetDapperSqls(typeof(T));
            string     sql  = string.Format("SELECT COUNT(1) FROM [{0}] {1}", sqls.TableName, where);

            return(ExecuteScalar <int>(sql, param));
        }
Exemplo n.º 4
0
        public static DapperSqls GetDapperSqls(Type t)
        {
            if (!DapperSqlsDict.Keys.Contains(t.TypeHandle))
            {
                lock (_locker)
                {
                    if (!DapperSqlsDict.Keys.Contains(t.TypeHandle))
                    {
                        DapperSqls sqls = DapperCommon.GetDapperSqls(t);

                        string Fields   = DapperCommon.GetFieldsStr(sqls.AllFieldList, "[", "]");
                        string FieldsAt = DapperCommon.GetFieldsAtStr(sqls.AllFieldList);
                        string FieldsEq = DapperCommon.GetFieldsEqStr(sqls.AllFieldList, "[", "]");

                        string FieldsExtKey   = DapperCommon.GetFieldsStr(sqls.ExceptKeyFieldList, "[", "]");
                        string FieldsAtExtKey = DapperCommon.GetFieldsAtStr(sqls.ExceptKeyFieldList);
                        string FieldsEqExtKey = DapperCommon.GetFieldsEqStr(sqls.ExceptKeyFieldList, "[", "]");

                        sqls.AllFields     = Fields;
                        sqls.AllFieldsAt   = FieldsAt;
                        sqls.AllFieldsAtEq = FieldsEq;

                        sqls.AllFieldsExceptKey     = FieldsExtKey;
                        sqls.AllFieldsAtExceptKey   = FieldsAtExtKey;
                        sqls.AllFieldsAtEqExceptKey = FieldsEqExtKey;

                        if (!string.IsNullOrEmpty(sqls.KeyName) && sqls.IsIdentity) //有主键并且是自增
                        {
                            sqls.InsertSql         = string.Format("INSERT INTO [{0}]({1})VALUES({2})", sqls.TableName, FieldsExtKey, FieldsAtExtKey);
                            sqls.InsertIdentitySql = string.Format("INSERT INTO [{0}]({1})VALUES({2})", sqls.TableName, Fields, FieldsAt);
                        }
                        else
                        {
                            sqls.InsertSql = string.Format("INSERT INTO [{0}]({1})VALUES({2})", sqls.TableName, Fields, FieldsAt);
                        }

                        if (!string.IsNullOrEmpty(sqls.KeyName)) //含有主键
                        {
                            sqls.DeleteByIdSql  = string.Format("DELETE FROM [{0}] WHERE [{1}]=@id", sqls.TableName, sqls.KeyName);
                            sqls.DeleteByIdsSql = string.Format("DELETE FROM [{0}] WHERE [{1}] IN @ids", sqls.TableName, sqls.KeyName);
                            sqls.GetByIdSql     = string.Format("SELECT {0} FROM [{1}] WHERE [{2}]=@id", Fields, sqls.TableName, sqls.KeyName);
                            sqls.GetByIdsSql    = string.Format("SELECT {0} FROM [{1}] WHERE [{2}] IN @ids", Fields, sqls.TableName, sqls.KeyName);
                            sqls.UpdateSql      = string.Format("UPDATE [{0}] SET {1} WHERE [{2}]=@{2}", sqls.TableName, FieldsEqExtKey, sqls.KeyName);
                        }
                        sqls.DeleteAllSql = string.Format("DELETE FROM [{0}]", sqls.TableName);
                        sqls.GetAllSql    = string.Format("SELECT {0} FROM [{1}]", Fields, sqls.TableName);

                        DapperSqlsDict[t.TypeHandle] = sqls;
                    }
                }
            }

            return(DapperSqlsDict[t.TypeHandle]);
        }
Exemplo n.º 5
0
        public override T GetByWhereFirst <T>(string where, object param = null, string returnFields = null)
        {
            DapperSqls sqls = GetDapperSqls(typeof(T));

            if (string.IsNullOrEmpty(returnFields))
            {
                returnFields = sqls.AllFields;
            }
            string sql = string.Format("SELECT {0} FROM [{1}] {2}", returnFields, sqls.TableName, where);

            return(QueryFirstOrDefault <T>(sql, param));
        }
Exemplo n.º 6
0
        public override IEnumerable <T> GetByWhere <T>(string where, object param = null, string returnFields = null)
        {
            DapperSqls sqls = GetDapperSqls(typeof(T));

            if (string.IsNullOrEmpty(returnFields))
            {
                returnFields = sqls.AllFields;
            }
            string sql = string.Format("SELECT {0} FROM [{1}] WITH(NOLOCK) {2}", returnFields, sqls.TableName, where);

            return(Query <T>(sql, param));
        }
Exemplo n.º 7
0
        public override DataTable GetSchemaTable <T>(string returnFields = null)
        {
            DapperSqls sqls = GetDapperSqls(typeof(T));

            if (returnFields == null)
            {
                returnFields = sqls.AllFields;
            }
            string sql = string.Format("SELECT {0} FROM `{1}` LIMIT 0", returnFields, sqls.TableName);

            return(QueryDataTable(sql));
        }
Exemplo n.º 8
0
        public override IEnumerable <T> GetAll <T>(string returnFields = null, string orderBy = null)
        {
            DapperSqls sqls = GetDapperSqls(typeof(T));

            if (string.IsNullOrEmpty(returnFields))
            {
                return(Query <T>(sqls.GetAllSql + " " + orderBy));
            }
            else
            {
                string sql = string.Format("SELECT {0} FROM [{1}] " + orderBy, returnFields, sqls.TableName);
                return(Query <T>(sql));
            }
        }
Exemplo n.º 9
0
        public override T GetById <T>(object id, string returnFields = null)
        {
            DapperSqls sqls = GetDapperSqls(typeof(T));

            if (string.IsNullOrEmpty(sqls.KeyName))
            {
                throw new Exception("表[" + sqls.TableName + "]没有主键");
            }

            if (string.IsNullOrEmpty(returnFields))
            {
                return(QueryFirstOrDefault <T>(sqls.GetByIdSql, new { id = id }));
            }
            else
            {
                string sql = string.Format("SELECT {0} FROM [{1}] WHERE [{2}]=@id", returnFields, sqls.TableName, sqls.KeyName);
                return(QueryFirstOrDefault <T>(sql, new { id = id }));
            }
        }
Exemplo n.º 10
0
        public override IEnumerable <T> GetBySkipTake <T>(int skip, int take, string where = null, object param = null, string returnFields = null, string orderBy = null)
        {
            DapperSqls sqls = GetDapperSqls(typeof(T));

            if (returnFields == null)
            {
                returnFields = sqls.AllFields;
            }

            if (orderBy == null)
            {
                if (!string.IsNullOrEmpty(sqls.KeyName))
                {
                    orderBy = string.Format("ORDER BY [{0}]", sqls.KeyName);
                }
                else
                {
                    orderBy = string.Format("ORDER BY [{0}]", sqls.AllFieldList.First());
                }
            }

            StringBuilder sb = new StringBuilder();

            if (skip == 0) //第一页,使用Top语句
            {
                sb.AppendFormat("SELECT TOP ({0}) {1} FROM [{2}] WITH(NOLOCK) {3} {4}", take, returnFields, sqls.TableName, where, orderBy);
            }
            else //使用ROW_NUMBER()
            {
                sb.AppendFormat("WITH cte AS(SELECT ROW_NUMBER() OVER({0}) AS rownum,{1} FROM [{2}] WITH(NOLOCK) {3})", orderBy, returnFields, sqls.TableName, where);
                if (returnFields.Contains(" AS") || returnFields.Contains(" as"))
                {
                    sb.AppendFormat("SELECT * FROM cte WHERE cte.rownum BETWEEN {1} AND {2}", returnFields, skip + 1, skip + take);
                }
                else
                {
                    sb.AppendFormat("SELECT {0} FROM cte WHERE cte.rownum BETWEEN {1} AND {2}", returnFields, skip + 1, skip + take);
                }
            }

            return(Query <T>(sb.ToString(), param));
        }
Exemplo n.º 11
0
        public override IEnumerable <T> GetByPage <T>(int pageIndex, int pageSize, out int total, string where = null, object param = null, string returnFields = null, string orderBy = null)
        {
            DapperSqls sqls = GetDapperSqls(typeof(T));

            if (returnFields == null)
            {
                returnFields = sqls.AllFields;
            }

            if (orderBy == null)
            {
                if (!string.IsNullOrEmpty(sqls.KeyName))
                {
                    orderBy = string.Format("ORDER BY [{0}]", sqls.KeyName);
                }
                else
                {
                    orderBy = string.Format("ORDER BY [{0}]", sqls.AllFieldList.First());
                }
            }

            int skip = 0;

            if (pageIndex > 0)
            {
                skip = (pageIndex - 1) * pageSize;
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendFormat("SELECT COUNT(1) FROM [{0}] {1};", sqls.TableName, where);
            sb.AppendFormat("SELECT {0} FROM [{1}] {2} {3} LIMIT {4},{5}", returnFields, sqls.TableName, where, orderBy, skip, pageSize);

            QueryMultiple(sb.ToString(), param);
            total = reader.ReadFirstOrDefault <int>();
            return(reader.Read <T>());
        }
Exemplo n.º 12
0
        public override int DeleteByWhere <T>(string where, object param)
        {
            DapperSqls sqls = GetDapperSqls(typeof(T));

            return(Execute(sqls.DeleteAllSql + " " + where, param));
        }
Exemplo n.º 13
0
        public override IEnumerable <T> GetByPage <T>(int pageIndex, int pageSize, out int total, string where = null, object param = null, string returnFields = null, string orderBy = null)
        {
            DapperSqls sqls = GetDapperSqls(typeof(T));

            if (returnFields == null)
            {
                returnFields = sqls.AllFields;
            }

            if (orderBy == null)
            {
                if (!string.IsNullOrEmpty(sqls.KeyName))
                {
                    orderBy = string.Format("ORDER BY [{0}]", sqls.KeyName);
                }
                else
                {
                    orderBy = string.Format("ORDER BY [{0}]", sqls.AllFieldList.First());
                }
            }

            int skip = 0;

            if (pageIndex > 0)
            {
                skip = (pageIndex - 1) * pageSize;
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendFormat("DECLARE @total INT;SELECT @total = COUNT(1) FROM [{0}] WITH(NOLOCK) {1};SELECT @total;", sqls.TableName, where);
            sb.Append("IF(@total>0) BEGIN ");
            if (pageIndex == 1)
            {
                sb.AppendFormat("SELECT TOP ({0}) {1} FROM [{2}] WITH(NOLOCK) {3} {4}", pageSize, returnFields, sqls.TableName, where, orderBy);
            }
            else
            {
                sb.AppendFormat("WITH cte AS (SELECT ROW_NUMBER() OVER({0}) AS rownum,{1} FROM [{2}] WITH(NOLOCK) {3})", orderBy, returnFields, sqls.TableName, where);
                if (returnFields.Contains(" AS") || returnFields.Contains(" as"))
                {
                    sb.AppendFormat("SELECT * FROM cte WHERE cte.rownum BETWEEN {0} AND {1}", skip + 1, skip + pageSize);
                }
                else
                {
                    sb.AppendFormat("SELECT {0} FROM cte WHERE cte.rownum BETWEEN {1} AND {2}", returnFields, skip + 1, skip + pageSize);
                }
            }
            sb.Append(" END");

            QueryMultiple(sb.ToString(), param);
            total = reader.ReadFirstOrDefault <int>();
            if (total > 0)
            {
                return(reader.Read <T>());
            }
            else
            {
                return(Enumerable.Empty <T>());
            }
        }