【吉瑞外卖 | 第2天 | 分页,信息编辑功能实现】

今日任务:实现分页功能,实现对员工的状态修改功能,实现员工信息编辑功能。

分页功能

实现逻辑:

1、分页:Ipage函数通过page和pageSize分页构造器。
2、搜索:通过LambdaQueryWrapper匹配关键字。
3、调用service的page进行分页。

代码实现:

 @GetMapping("/page")
    public R<Object> list(
            @RequestParam(value = "name", defaultValue = "") String name,
            @RequestParam(value = "pageSize", defaultValue = "2") int pageSize,
            @RequestParam(value = "page", defaultValue = "1") int page
    ) {
        //1、分页:Ipage函数通过page和pageSize分页构造器
        Page pageInfo = new Page<>(page, pageSize);
        //2、搜索:通过LambdaQueryWrapper匹配关键字
        LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(!name.isEmpty(), Employee::getUsername, name)
                .or()
                .like(!name.isEmpty(), Employee::getName, name);
        //调用service的page进行分页
        employeeService.page(pageInfo, queryWrapper);
//        //封装分页查询数据
//        PageUtil<Employee> emp = new PageUtil<>(pageInfo.getCurrent(), pageInfo.getTotal(), pageInfo.getRecords());
        return R.success(pageInfo);
    }

总体实现的难度不是很高,主要是通过MybatisPlus中的page方法自动实现。
关于这串代码:

@RequestParam(value = "name", defaultValue = "") String name,
@RequestParam(value = "pageSize", defaultValue = "2") int pageSize,
@RequestParam(value = "page", defaultValue = "1") int page

这是一个对于搜索关键字name,页容量pageSize,以及当前页page进行一个初始化。但是在这里pageSize没有起作用,因为前端提前处理了关于页容量的相应。

 PageUtil<Employee> emp = new PageUtil<>(pageInfo.getCurrent(), pageInfo.getTotal(), pageInfo.getRecords());

这部分其实是对返回的数据类型做一个封装,这样设计更加合理,但前端是有相应的处理的,所以注释掉了。

员工的状态修改功能

直接上代码吧:

@PutMapping
    public  R<String> update (HttpServletRequest request,@RequestBody Employee employee){
        Employee emp = (Employee) request.getSession().getAttribute("employee");
        employeeService.updateById(employee);
        employee.setUpdateTime(new Date());
        employee.setUpdateUser(emp.getId());
//        employeeService.saveOrUpdate(employee);
//        return R.success("更新成功");
        return R.success("员工状态更新成功!");
    }

代码中其实只做了一件事: employeeService.updateById(employee);
更新用户信息,是一个可以全局调用的方法,只要涉及到用户信息的更新,前端代码都可以调用。这样写的好处提高了代码的复用率,但是也存在单点故障,即只要这部分代码出问题,会殃及所有调用该代码的功能。

员工信息编辑

代码实现

@GetMapping("/{id}")
public R<Employee> edit(@PathVariable("id") Long id){
    Employee empId = employeeService.getById(id);
    if (Objects.isNull(empId)){
        return R.error("用户不存在!");
    }
    return R.success(empId);
}

同样也只是通过id查询了对应的数据,而更新则调用的是上面的代码。

每日一讲:
由于今天确实没干多少活,所以讲点知识点吧!接着昨天的内容延申一下。

索引失效:
索引什么时候会失效呢?
1,使用模糊查询:模糊查询的时候,如"like %李",这时候若进入查询操作且name为索引,它会先传入一个%,这时候发现索引表中根本不存在这个‘%’,所以会使得索引失效。
2,使用 or:若or的前一部分是索引,而后一部分没有设置索引,则索引失效。一般解决方式就是使用union 去连接。
3,使用order by:直接进行全局扫描
4,in使用不当:也就是把大部分数据都放到in中,这时候的查询就不会有很多优化了。
5,where语句后使用函数,索引失效。
6,联合索引非最左匹配
7,使用了运算,比如where中对索引字段进行运算,改变了索引的值,树中找不到对应的数据。

详情请见:这篇文章记录的比较详细
http://t.csdnimg.cn/pAOpx

存储引擎:
MySQL的存储引擎分为三种:InnoDB,MyISAM,MEMORY

  • InnoDB:这是MySQL的默认存储引擎,它提供对数据库ACID事务的支持,并提供行级锁和外键约束,设计的初衷就是处理大数据容量的数据库系统。
    使用它在创建表的时候会自动设置自增列,自增列也会自动设置索引。
  • MyISAM:不提供事务支持,也不支持行级锁和外键。
    对事物的完整性没有要求,或者以查询,插入为主的应用基本都可以选用它。
  • MEMORY:所有数据都在内存中,数据处理的速度非常快,但安全性不高,且对表的大小也会有限制。
详情请见:
http://t.csdnimg.cn/US0U1

这里我会做一个好文章分享,只是觉着人家的文章写的真的很全面很好,所以做个分享。而且一个知识点它所设置的知识点很多,这里就略微开下小差。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值