期货大赛项目|二,DAL详解

接口层就不重点讲述了,直接DAL层

DAL层

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using FuturesContest.IDAL;
using SqlSugar;

namespace FuturesContest.DAL
{
    public class BaseDal<T>: IBaseDal<T> where T:class,new()
    {
        public int Add(T entity)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var result = db.Insertable(entity).ExecuteCommand();
                return result;
            }
        }

        public int AddReutrnIdentity(T entity)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var result = db.Insertable(entity).ExecuteReturnIdentity();
                return result;
            }
        }

        public T AddReturnEntity(T entity)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var result = db.Insertable(entity).ExecuteReturnEntity();
                return result;
            }
        }

        public bool AddReturnBool(T entity)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var result = db.Insertable(entity).ExecuteCommandIdentityIntoEntity();
                return result;
            }
        }

        public int AddBatch(IEnumerable<T> list)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var result = db.Insertable(list.ToArray()).ExecuteCommand();
                return result;
            }
        }

        public int Delete(T entity)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var result = db.Deleteable(entity).ExecuteCommand();
                return result;
            }
        }

        public int Delete(IEnumerable<T> list)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var result = db.Deleteable<T>(list).ExecuteCommand();
                return result;
            }
        }

        public int Delete(int id)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var result = db.Deleteable<T>(id).ExecuteCommand();
                return result;
            }
            
        }

        public int Delete(int[] ids)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var result = db.Deleteable<T>(ids).ExecuteCommand();
                return result;
            }
        }

        public int Delete(IEnumerable<int> ids)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var result = db.Deleteable<T>(ids).ExecuteCommand();
                return result;
            }
        }

        public int Modify(T entity)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var result = db.Updateable(entity).ExecuteCommand();
                return result;
            }
        }

        public int ModifyBatch(List<T> list)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var result = db.Updateable(list).ExecuteCommand();
                return result;
            }
        }

        public IEnumerable<T> QueryAll()
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var result = db.Queryable<T>().ToList();
                return result;
            }
        }

        public IEnumerable<T> QueryTop(int top)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var result = db.Queryable<T>().Take(top).ToList();
                return result;
            }
        }

        public T QueryById(int id)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var result = db.Queryable<T>().InSingle(id);
                return result;
            }
        }

        public IEnumerable<T> QueryPage(Expression<Func<T, object>> orderBy, int orderType, int pageIndex, int pageSize, ref int totalCount)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var result = db.Queryable<T>().OrderBy(orderBy, (OrderByType)orderType).ToPageList(pageIndex, pageSize, ref totalCount);
                return result;
            }
        }

        public IEnumerable<T> QueryByIf(Expression<Func<T, bool>> where)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                if (where != null)
                {
                    var list = db.Queryable<T>().WhereIF(true, where).ToList();
                    return list;
                }
                else
                {
                    var list = db.Queryable<T>().ToList();
                    return list;
                }
            }
            
        }

        public IEnumerable<T> QueryByIfPage(Expression<Func<T, object>> orderBy, int orderType, Expression<Func<T, bool>> where, int pageIndex, int pageSize, ref int totalCount)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var list = db.Queryable<T>().WhereIF(true, where).OrderBy(orderBy, (OrderByType)orderType).ToPageList(pageIndex, pageSize, ref totalCount);
                return list;
            }
        }
    }
}
View Code
public class BaseDal<T>: IBaseDal<T> where T:class,new()

T为泛型类型,可以用任意类型代替

where为泛型约束

class约束了T必须是一个类

new()约束了T必须有一个无参的构造函数

类中封装了很多的公用方法,这些方法在每一个实体类中都适用.

     public IEnumerable<T> QueryByIf(Expression<Func<T, bool>> where)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                if (where != null)
                {
                    var list = db.Queryable<T>().WhereIF(true, where).ToList();
                    return list;
                }
                else
                {
                    var list = db.Queryable<T>().ToList();
                    return list;
                }
            }
        }

这是个多条件查询的方法,如果按照以前的思路,我们肯定要传入所有可能为筛选条件的参数,然后用if判断是否等于空,并用where1=1的拼接sql语句方法拼写,太繁琐

而SqlSugar支持lamada查询,所以我直接传入一个Expression<Func<T, bool>> where类型的参数,这就是lamada表达式参数类型的写法

调用的时候就可以这样写dal.QueryByIf(m=>m.name=="test"&&m.password=="test")

public IEnumerable<T> QueryPage(Expression<Func<T, object>> orderBy, int orderType, int pageIndex, int pageSize, ref int totalCount)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var result = db.Queryable<T>().OrderBy(orderBy, (OrderByType)orderType).ToPageList(pageIndex, pageSize, ref totalCount);
                return result;
            }
        }

这是一个分页查询

SqlSugar为我们封装好了分页查询的方法ToPageList(),也为我们封装好了排序的OrderBy()

注意,OrderBy一定要在ToPageList之前

OrderBy接收一个lamada的排序字段和枚举的排序类型

这里介绍一个小知识,枚举和int是可以互相转换的,枚举顺序默认从0开始,0就代表枚举中的第一个值,1代表第二个值

所以我们传入了一个int类型的orderType参数

public IEnumerable<T> QueryByIfPage(Expression<Func<T, object>> orderBy, int orderType, Expression<Func<T, bool>> where, int pageIndex, int pageSize, ref int totalCount)
        {
            using (var db = SqlSugarFatory.GetInstance())
            {
                var list = db.Queryable<T>().WhereIF(true, where).OrderBy(orderBy, (OrderByType)orderType).ToPageList(pageIndex, pageSize, ref totalCount);
                return list;
            }
        }

当分页需要筛选的时候,我们在添加一个lamada的where条件,在orderBy之前进行筛选

猜你喜欢

转载自www.cnblogs.com/tanfuchao/p/9208783.html
DAL