目录
4.4后台系统登陆功能—代码开发(梳理登陆方法处理逻辑)10

注:
需求分析解释
1、产品原型通常根据网页的形式来介绍一下
2、通过文档编写,来阐述项目有哪些功能。
涉及部分解释:
1、当前的项目需要有几个数据库:数据库内的表和字段是什么样的
2、 UI界面,将实际的效果展现出来。




注:该部分一般是产品经理来进行制作的。

注:
1、网关层:来自请求后,将来自用户端的请求分配给一个或多个tomcat
2、应用层:主要是Session做集群的时候session共享的功能。
3、应用层Swagger:用于优化,将项目进行拆分,变成前后端项目分离的功能。
4、数据层Redis:用于数据缓存,在优化的阶段使用。
5、工具git:代码版本的管理



注:两种创建数据库的方式。
1、图形化软件
2、命令行创建





小技巧学习:在终端中进行数据的输出(使用log.info)
添加注释@Slf4j

配置静态资源映射:将做好的静态资源放置到IDEA中,并能够通过浏览器进行访问
解决方法:添加一个配置类,使用静态资源映射。
- @Slf4j
- @Configuration
- public class WebMvcConfig extends WebMvcConfigurationSupport {
- /***
- * 设置静态映射。将在实际的浏览器中能够获取得到工程文件中的指定的静态资源。
- * @param registry
- */
- @Override
- protected void addResourceHandlers(ResourceHandlerRegistry registry) {
- log.info("开始进行静态资源映射...");
- registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
- registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
-
- }
- }
思路流程的整理:
1、创建一个SprngBoot的的项目文件。首先需要添加的注解是@SpringBootApplication
2、创建一个配置类,首先需要添加注解

需要服务端创建一些类。
Controller:来接收来自网页的用户名和密码


然后使用Service类来调用数据库,在然后调用Mapper来调用数据库。最终调到数据库DB中的数据来和我们输入的数据内容是否一致。
该部分是DB查询对应的员工表。因为是美团的后台管理系统。

注:这部分是上述DB要查询的表。
创建数据库和IDEA之间的对应: 映射
会根据数据库存有的类,对应的在程序当中也会创建一个程序实体类。 IDEA中的数据内容和数据库中的数据类型命名是一致的。


注:实现类放到impl文件夹下
上面已经将mapper、controller和service进行创建。

需要编写很多的controller,这些都是响应客户端的页面返回回来的请求。然后controller处理完请求后,反馈给页面一个结果。
本项目的案例统一的都是利用这个R类对象作为处理的结果,进行反馈的。
最后所有的处理结果都会被处理成一个R对象进行值返回。为增强通用性设置一个泛型。
1、由于客户端登陆界面是传输的json的类型数据,所以需要对对象添加注解@RequestBody。

2、添加的对象名称要与自己设定employ类中对象名称一致

3、添加一个session来将将来登陆成功后employ对象中员工id存到session中,来表示成功。然后后面可以利用这个request的get获取,来获取登陆成功的员工id。


根据功能--->处理逻辑--->进行编码
为什么使用employeeService.getOne原因:
在数据库中该数据的索引位置的索引类型为Unique。并且用户名是唯一,所以是Unique。并且能够使用getOne。

代码部分实现4.4中的逻辑分析:
- package com.itheima.reggie.controller;
-
-
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.itheima.reggie.common.R;
- import com.itheima.reggie.entity.Employee;
- import com.itheima.reggie.service.EmployeeService;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.util.DigestUtils;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- import javax.servlet.http.HttpServletRequest;
-
- @Slf4j
- @RestController
- @RequestMapping("/employee")//和数据库连接名一致
- public class EmployeeController {
-
- @Autowired
- private EmployeeService employeeService;
-
- /**
- * 员工登陆
- * @param request
- * @param employee
- * @return
- */
- @PostMapping("/login")
- private R
login(HttpServletRequest request, @RequestBody Employee employee){ - //1、将页面提交的密码password进行md5加密处理
- String password = employee.getPassword();
- password = DigestUtils.md5DigestAsHex(password.getBytes());//将处理后的数据还传递给自己
-
- //2、根据页面提交的用户名uesrname查询数据库
- LambdaQueryWrapper
queryWrapper = new LambdaQueryWrapper<>();//包装一个查询对象 - queryWrapper.eq(Employee::getUsername,employee.getUsername());//调用匹配对比
- Employee emp = employeeService.getOne(queryWrapper);//与数据库连接,获取数据库中的数据信息
-
- //3、如果没有查询到则返回登陆失败结果
- if(emp == null){
- return R.error("登陆失败");
- }
-
- //4、密码比对,如果不一致则返回登陆失败结果
- if(!emp.getPassword().equals(password)){//使用第二步中的获取数据库中的数据,被封装的对象emp,
- // 进行数据库中的数据获取。和实际的密码(用户端输入的密码)进行比较
- return R.error("登陆失败");
- }
-
- //5、查看员工的状态,如果为已禁用状态,则返回员工已禁用结果。员工的状态实际上就是数据库中给员工设定状态0/1
- if(emp.getStatus() == 0){
-
- return R.error("账号已禁用");
- }
-
- //6、登陆成功,将员工id存入最上面对象部分所创将的Session中,并通过Request返回登陆成功的结果给客户端
- request.getSession().setAttribute("emplpyee",emp.getId());
- return R.success(emp);
- }
-
- }
使用debug对前面的程序进行测试

目前的状态信息如下:根据需求分析有以下逻辑思路

代码书写:

下图中的路径填写到注解@PostMapping中。


数据准备部分:

数据效果实现的部分:

修改效果:

6.2不同模块点击后的效果实现分析:
第一步:
第二步:


第三步:
