(一)登录
实现思路:
- 接收到用户登录输入的用户名和密码,封装到了emp对象中
- 对密码进行MD5加密
- 创建条件构造器
- 添加sql查询判断条件,emp对象中的Username等于Employee数据表中的Username
- 调用MyBatis-Plus的方法查询数据库,返回Employee对象
- 判断员工是否存在
- 判断员工账号和密码是否匹配
- 判断员工是否被禁用
- 登录成功,将员工id存入Session
- 返回成功结果【员工对象】
controller层代码如下:
@PostMapping("/login")public R login(HttpSession session, @RequestBody Employee emp){log.info("【登录员工信息:{}】",emp);String password = DigestUtils.md5DigestAsHex(emp.getPassword().getBytes());LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();wrapper.eq(Employee::getUsername,emp.getUsername());Employee employee = employeeService.getOne(wrapper);if (employee==null){return R.error("员工不存在!");}if (password==null){return R.error("员工账号和密码不匹配!");}if (employee.getStatus()==0){return R.error("员工已禁用!");}session.setAttribute("employee",employee.getId());return R.success(employee);}
(二)登录退出
实现思路:
- 清理session中用户信息,直接让当前这个用户关联的session对象立即失效,其中保存的数据也被删掉了
- 再返回处理结果
controller层
@PostMapping("/logout")public R logout(HttpSession session){session.invalidate();return R.success("退出成功!");}
(三)新增
实现思路:
- 接收到用户登录输入的用户名和密码,封装到了emp对象中
- 给emp对象设置使用md5加密之后的默认密码
- 给emp对象设置默认状态为启用
- 调用mybatisplus提供的通用IService接口类的save新增保存方法
- 返回处理结果
controller层
@PostMappingpublic R add(HttpSession session,@RequestBody Employee emp){emp.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));emp.setStatus(1);boolean flag = employeeService.save(emp);return flag?R.success(true):R.error("新增员工失败!");}
(四)分页查询
实现思路:
- 调用业务处理
- 响应处理结果
controller层
@GetMapping("/page")
public R<Page<Employee>> selectPage(@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int pageSize, String name){Page<Employee> empPage = employeeService.findPage(page,pageSize,name);return R.success(empPage);
}
service层
public interface EmployeeService extends IService<Employee> {Page<Employee> findPage(int page, int pageSize, String name);
}
实现思路:
- 注入employeeDao
- 配置MyBatisPlus分页拦截器,在公共部分已配置
- 执行分页查询 返回Page对象
- 将分页查询参数page和pageSize封装到Page对象中
- 创建wrapper对象 设置查询条件
- 调用selectPage方法 传入Page和Wrapper对象 完成分页查询
- 返回Page对象
serviceImpl层代码实现如下:
@Service
public class EmployeeServiceImpl extends ServiceImpl<EmployeeDao, Employee> implements EmployeeService {@Autowiredprivate EmployeeDao employeeDao;//findPage实现@Overridepublic Page<Employee> findPage(int page, int pageSize, String name) {Page<Employee> employeePage = new Page<>(page, pageSize);LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();wrapper.like(name!=null && name.length()>0,Employee::getName,name);employeeDao.selectPage(employeePage,wrapper);return employeePage;}
}
(五)根据ID查询
实现思路:
- 调用mybatisplus提供的通用IService接口类的getById()方法
- 响应处理结果
controller层实现代码:
@GetMapping("/{id}")public R<Employee> getById(@PathVariable Long id){Employee employee = employeeService.getById(id);return R.success(employee);}
(六)禁用 && 启用
controller层
@PutMappingpublic R<String> updateEmp(@RequestBody Employee employee,HttpSession session){//1.调用service处理int rows = employeeService.updateEmp(employee);//2.响应处理结果return rows>0?R.success("修改成功!"):R.error("修改失败!");}
service层
public interface EmployeeService extends IService<Employee> {Page<Employee> findPage(int page, int pageSize, String name);
}
serviceImpl层
实现思路:
- 注入employeeDao
- 修改员工状态status MyBatisPlus中的修改默认使用了动态修改部分字段 id和status,只会根据id修改status
@Service
public class EmployeeServiceImpl extends ServiceImpl<EmployeeDao, Employee> implements EmployeeService {@Autowiredprivate EmployeeDao employeeDao;//修改员工状态实现@Overridepublic int updateEmp(Employee employee) {int rows = employeeDao.updateById(employee);return rows;}
}