创建文件:
学到这
应该都轻车熟路了吧
分层操作使得逻辑更加清晰
注册服务:
我们上次把部门服务进行了注入
这次我们再将刚刚建好的员工服务进行注入
条件分页查询:
这个功能可以说是重中之重
其他功能和部门的大差不差
后边我就直接放源码
就不一一解释了
效果展示
(后期会详细讲怎么前后端互联)
API要求:
请求路径:/emps
请求方式:GET
接口描述:该接口用于员工列表数据的条件分页查询
看到这个返回参数
有点莫名熟悉
total+emp
不由得想封装一个类
在Models下创建一个PageModel类
这里的T是泛型
因为这个List要指定一个类型才行
当然已经确定就是emp的话
可以直接写List<EmpModel>即可
上述泛型是为了让代码的可扩展性更高
controller:
//服务
private readonly IEmpService empService;
public EmpController(IEmpService empService){
this.empService=empService;
}
//分页查询
[HttpGet]
[Route("/emps")]
public ResultModel GetPage(string name,int gender,DateTime beginTime,DateTime endTime,int currentPage,int pageSize){
PageModel<EmpModel> pageModel=empService.FindPage(currentPage,pageSize,name,gender,beginTime,endTime);
return ResultModel.success(pageModel);
}
服务和Http请求方式和请求路径就不多说了
看函数GetPage
一看~~~这么多参数!!!!
通常情况下这种不应该封装到一个实体类中吗?
问的好
博主也是尝试了好久
如果封装在实体类中,前后端接收到的参数个数不一致
因为我们是条件查询,有的参数可以给也可以不给
比如说我们想要查询性别为男的员工
那么姓名和入职日期是空的
前端向后端发送时就不会传递相关参数
到这
设置默认值不就好了吗?
emmmm理论是这样但是不是很合理
比如说我的gender是1和2,如果给默认参数该给什么?1?2?都不行
这样默认情况就不是查询全部员工
0?那就更不对了,连一个员工也查询不到
综上所述
我们还是将问题简单化
把一个一个参数列出来即可
到mapper层去进行条件筛选即可
好
service:
接口声明:
public PageModel<EmpModel> FindPage(int Page,int PageSize,string name,int gender,DateTime begin,DateTime end);
实现类实现:
public PageModel<EmpModel> FindPage(int Page, int PageSize,string name, int gender, DateTime begin, DateTime end)
{
if(Page<1)Page=1;
if(PageSize<1)PageSize=10;
int Start=(Page-1)*PageSize;
List<EmpModel> ListAll=empMapper.FindPage(Start,PageSize,name,gender,begin,end);
IQueryable<EmpModel> ResList=ListAll.AsQueryable();
// 条件过滤
if (!string.IsNullOrEmpty(name))
{
ResList = ResList.Where(p => p.name.Contains(name, StringComparison.OrdinalIgnoreCase));
}
if (gender!=0)
{
ResList = ResList.Where(p => p.gender==gender);
}
// 日期过滤
if (begin!=DateTime.MinValue)
{
ResList = ResList.Where(p => p.entrydate >= begin);
}
if (end!=DateTime.MinValue)
{
ResList = ResList.Where(p => p.entrydate <=end);
}
long total=ResList.Count();
List<EmpModel> res=ResList
.OrderByDescending(s=>s.entrydate.ToString())
.Skip(Start)
.Take(PageSize)
.ToList();
return new PageModel<EmpModel>(total,res);
}
是否看到这么长有点头大
逻辑很简单
page和pageSize无参数时是0
如果<1那么就给出默认值 page=1,pageSize=10
分页不就是一页显示几条数据嘛
对吧
Start是数据库中员工列表从哪一条开始
查询到的员工信息我们放在List中
接着就是条件过滤
逻辑很简单,有这个条件,那么我们就用Where语句进行筛选
Count是筛选完毕之后的总条数
接着就是再进行
Skip就是跳过前面的Start条
Take是那pageSize条,相当于这一页显示多少条数据、
OrderByDescending是按照入职时间进行降序排列
最新入职的排在最前面
更为规整
mapper:
public List<EmpModel> FindPage(int Start,int PageSize,string name,int gender,DateTime begin,DateTime end){
return context.Emp.ToList();
}
直接返回全部员工信息
到service才是处理数据的
到此这个条件查询功能就做好了
我们运行测试一下
测试:
运行打开swagger
出现了emp的getApi接口
什么都不填就是查询所有信息
成功!!!!
输入名字金庸
只显示金庸的信息
其他功能:
api接口文档中有各个功能的要求以及返回和响应数据
controller:
service:
mapper:
到此我们员工管理和部门管理的后端已经做好
运行去swagger看一下
哦豁!!!!
下节我们再把登录的后端做一下
之后进行前后端渲染
————————————
持续更新中...
关注[YM]课设专栏[YM]课设_夜喵YM的博客-CSDN博客
文章:
[YM]课设-C#-WebApi-Vue-员工管理系统 (前言)-CSDN博客
[YM]课设-C#-WebApi-Vue-员工管理系统 (一)创建webapi项目-CSDN博客