写在最前:此文章为黑马程序员瑞吉外卖项目学习笔记,感谢黑马的教程。附上链接:点击跳转到视频教程
学习本项目所需前置知识:
Java基础知识 javaweb、MySQL、maven、SSM、springboot、mybatisplus
1.瑞吉外卖项目概述
1.0项目中所需要的资源,百度网盘链接:
https://pan.baidu.com/s/1WKULh5F7BwjjPRpDnhozAA
提取码:ldd1
1.1项目效果展示

1.2软件开发整体流程

1.3整体项目介绍

1.3.1技术选型:

1.3.2功能架构

1.3.3 角色

2.开发环境搭建
2.1数据库环境搭建
创建名为reggie的数据库,并导入sql文件(sql文件在文首百度网盘链接中)

以下为创建出来的11个表

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 {
@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后台功能开发

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创建对应的包结构


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
|
@Data public class R<T> {
private Integer code;
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梳理登录方法处理逻辑

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;
@PostMapping("/login") public R<Employee> login(HttpServletRequest request,@RequestBody Employee employee){ String password = employee.getPassword(); password = DigestUtils.md5DigestAsHex(password.getBytes()); LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Employee::getUsername,employee.getUsername()); Employee emp = employeeService.getOne(queryWrapper);
if(emp == null){ return R.error("登陆失败"); }
if(!emp.getPassword().equals(password)){ return R.error("登陆失败"); } if(emp.getStatus()==0){ return R.error("账号已禁用"); } request.getSession().setAttribute("employee",emp.getId()); return R.success(emp); }
|
3.6后台系统退出功能


1 2 3 4 5 6 7 8 9 10 11 12
|
@PostMapping("/logout") public R<String> logout(HttpServletRequest request){ request.getSession().removeAttribute("employee"); return R.success("退出成功");
} }
|
只需把以上代码加到login方法后面
以上,为瑞吉外卖业务开发day01学习笔记。