写在最前:此文章为黑马程序员瑞吉外卖项目学习笔记,感谢黑马的教程。附上链接:点击跳转到视频教程

学习本项目所需前置知识:
Java基础知识 javaweb、MySQL、maven、SSM、springboot、mybatisplus

1.瑞吉外卖项目概述

1.0项目中所需要的资源,百度网盘链接:

https://pan.baidu.com/s/1WKULh5F7BwjjPRpDnhozAA
提取码:ldd1

1.1项目效果展示

image

1.2软件开发整体流程

image.png

1.3整体项目介绍

image.png

1.3.1技术选型:

image.png

1.3.2功能架构

image.png

1.3.3 角色

image.png

2.开发环境搭建

2.1数据库环境搭建

创建名为reggie的数据库,并导入sql文件(sql文件在文首百度网盘链接中)
image.png
以下为创建出来的11个表
image.png

2.2搭建项目工程

2.2.1 idea创建项目

我们直接创建一个springboot工程,选择SpringWeb,MySQL,mybatis,接着在pom.xml文件中导入druid,lombok,mybatisplus的依赖坐标。(ps:视频中创建的是Maven工程,比较麻烦,我们直接创建springboot工程。)

1.2.2导入项目所需的前端资源

(本项目注重后端开发,前端不需要我们自己写)
将分享资源中的前端资源导入到resources/static目录下。(如果这里创建的是maven工程,需要配置静态资源映射,代码如下)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Configuration
@Slf4j
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/");
}
}

2.2.3导入yml配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server:
port: 8080
spring:
application:
# 应用的名称,可选
name: reggie_take_out
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/reggie?serverTimezone=Asia
username: root
password: password
mybatis-plus:
configuration:
#在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
id-type: ASSIGN_ID

注意用户名和密码要配置成自己的

3.后台登录功能开发

3.1后台功能开发

image.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
* 员工实体
*/
@Data
public class Employee implements Serializable {

private static final long serialVersionUID = 1L;

private Long id;

private String username;

private String name;

private String password;

private String phone;

private String sex;

private String idNumber;//身份证号码

private Integer status;

private LocalDateTime createTime;

private LocalDateTime updateTime;

@TableField(fill = FieldFill.INSERT)
private Long createUser;

@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;

}

3.2创建对应的包结构

image.png
image.png

3.3导入结果返回类

此类是一个通用结果类,服务端响应的所有结果最终都会包装成此种类型返回给前端对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
* 通用的返回结果类,服务端相应的数据最终封装成此对象
* @param <T>
*/
@Data
public class R<T> {

private Integer code; //编码:1成功,0和其它数字为失败

private String msg; //错误信息

private T data; //数据

private Map map = new HashMap(); //动态数据

public static <T> R<T> success(T object) {
R<T> r = new R<T>();
r.data = object;
r.code = 1;
return r;
}

public static <T> R<T> error(String msg) {
R r = new R();
r.msg = msg;
r.code = 0;
return r;
}

public R<T> add(String key, Object value) {
this.map.put(key, value);
return this;
}

}

3.4梳理登录方法处理逻辑

image.png

3.5代码实现登录功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;//自动装配
/**
* 员工登录
* @param request
* @param employee
* @return
*/
@PostMapping("/login")
public R<Employee> login(HttpServletRequest request,@RequestBody Employee employee){
//1将页面提交的密码进行md5加密处理
String password = employee.getPassword();
password = DigestUtils.md5DigestAsHex(password.getBytes());
//2根据页面提交的用户名username查询数据库
LambdaQueryWrapper<Employee> 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)){
return R.error("登陆失败");
}
//5查看员工状态,如果禁用,返回员工禁用结果
if(emp.getStatus()==0){
return R.error("账号已禁用");
}
//6登录成功
request.getSession().setAttribute("employee",emp.getId());
return R.success(emp);
}


3.6后台系统退出功能

image.png
image.png

1
2
3
4
5
6
7
8
9
10
11
12
    /**
* 员工退出
* @param request
* @return
*/
@PostMapping("/logout")
public R<String> logout(HttpServletRequest request){
request.getSession().removeAttribute("employee");
return R.success("退出成功");

}
}

只需把以上代码加到login方法后面

以上,为瑞吉外卖业务开发day01学习笔记。