期货大赛项目|二,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;
}
}
}
}
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之前进行筛选
期货大赛项目|二,DAL详解的更多相关文章
- 详解C#泛型(二) 获取C#中方法的执行时间及其代码注入 详解C#泛型(一) 详解C#委托和事件(二) 详解C#特性和反射(四) 记一次.net core调用SOAP接口遇到的问题 C# WebRequest.Create 锚点“#”字符问题 根据内容来产生一个二维码
详解C#泛型(二) 一.自定义泛型方法(Generic Method),将类型参数用作参数列表或返回值的类型: void MyFunc<T>() //声明具有一个类型参数的泛型方法 { ...
- ViewPager 详解(二)---详解四大函数
前言:上篇中我们讲解了如何快速实现了一个滑动页面,但问题在于,PageAdapter必须要重写的四个函数,它们都各有什么意义,在上节的函数内部为什么要这么实现,下面我们就结合Android的API说明 ...
- iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)
本文链接:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-three.html 这里接着前文<iOS ...
- iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)
转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-two.html 一. 概况 本文接着 iOS 开 ...
- TortoiseGit学习系列之TortoiseGit基本操作拉取项目(图文详解)
前面博客 TortoiseGit学习系列之TortoiseGit基本操作克隆项目(图文详解) TortoiseGit学习系列之TortoiseGit基本操作修改提交项目(图文详解) TortoiseG ...
- TortoiseGit学习系列之TortoiseGit基本操作修改提交项目(图文详解)
前面博客 TortoiseGit学习系列之TortoiseGit基本操作克隆项目(图文详解) TortoiseGit基本操作修改提交项目 项目克隆完成后(可以将克隆 clone 理解为 下载,检出 c ...
- Git学习系列之Git基本操作拉取项目(图文详解)
前面博客 Git学习系列之Git基本操作推送项目(图文详解) 当然,如果多人协作,或者多个客户端进行修改,那么我们还要拉取(Pull ... )别人推送到在线仓库的内容下来. 大神们是不推荐使用 pu ...
- Git学习系列之Git基本操作推送项目(图文详解)
前面博客 Git学习系列之Git基本操作提交项目(图文详解) 如果完成到一定程度,那么可以推送到远端在线仓库. 推送之前,请确保你已经设置了全局的 user.name 和 user.email, 如果 ...
- Git学习系列之Git基本操作提交项目(图文详解)
前面博客 Git学习系列之Git基本操作克隆项目(图文详解) 然后可以 cd 切换到 LispGentleIntro 目录, 新增或者修改某些文件.这里只是模拟一下操作, 实际情况可能是 使用 Ecl ...
随机推荐
- requests库入门14-Cookie
因为http是没有状态的协议,上一个请求和下一个请求是没有关联.但是现实中又需要有关联,比如一个页面某个操作需要登陆之后才能进行,没有登陆就提示你登陆.为了实现这样的效果,所以出现了Cookie和Se ...
- 题解-bzoj4320 Homework
Problem bzoj4320 Solution 前置技能:分块+线段树+卡常+一点小小的数学知识 考试时A的 这种题无论怎么处理总有瓶颈,套路分块,设\(k\)以下的插入时直接暴力预处理,查询时直 ...
- This project is not a myeclipse hibernate project . Assuming Hibernate 3 capabilities configuration editor
开某工程Hibernate配置文件时出现提示,信息大概如标题. 根据网友提供,选中工程,点击MyEclipse-->Project capabilities-->add hibernate ...
- centos系统初始化配置
.改主机名: sed -i 's#HOSTNAME=.*#HOSTNAME=u05mix06.yaya.corp#g' /etc/sysconfig/network && hostna ...
- dig常用命令
Dig是域信息搜索器的简称(Domain Information Groper),使用dig命令可以执行查询域名相关的任务. ###1. 理解dig的输出结果 $ dig chenrongrong.i ...
- UML建模图
UML 2.0规范 迅速成为建立软件系统可视化.规范.文档的标准.统一建模语言(UML) 也被用于非软件系统的建模,并在很多领域,诸如金融,军事,工程方面应用广泛. UML 2 定义了13种基本的图, ...
- 如何保障Web应用安全性
通过加密算法对关键数据进行加密 通过过滤器防御跨站脚本攻击XSS.跨域请求伪造CRSF和SQL注入 通过安全框架( Shiro.Spring Security )进行认证和授权 设置IP黑白名单来进行 ...
- Go语言从入门到放弃(三) 布尔/数字/格式化输出
本章主要介绍Go语言的数据类型 布尔(bool) 布尔指对或者错,也就是说bool只有两个值, True 或 False 两个类型相同的值可以使用比较运算符来得出一个布尔值 当两个值是完全相同的情况下 ...
- Confluence 6 针对站点维护使用只读模式
如果你需要对 Confluence 进行维护,但是 Confluence 还是在运行或者你计划将站点合并到一个新的站点,你可以将你的 Confluence 站点设置为只读模式来限制用户在你站点中可以使 ...
- Confluence 6 如何配置快速导航的同时查找数量
进入后台后查看快速导航的启用和可以同时查找的数量. 然后进行通过单击右上角的编辑(Edit)按钮进行编辑. 对配置进行配置,启用快速查询和可以同时使用的最大查询数量. https://www.cwik ...