[YM]课设-C#-WebApi-Vue-员工管理系统 (四)员工管理-条件分页查询

创建文件:

学到这

应该都轻车熟路了吧

分层操作使得逻辑更加清晰 

注册服务:

我们上次把部门服务进行了注入

这次我们再将刚刚建好的员工服务进行注入

条件分页查询:

这个功能可以说是重中之重

其他功能和部门的大差不差

后边我就直接放源码

就不一一解释了

效果展示

(后期会详细讲怎么前后端互联) 

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博客

[YM]课设-C#-WebApi-Vue-员工管理系统 (二)连接数据库-CSDN博客

[YM]课设-C#-WebApi-Vue-员工管理系统 (三)部门管理-CSDN博客

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值