当前位置:网站首页>瑞吉外卖——Day01
瑞吉外卖——Day01
2022-07-28 11:16:00 【路过Coder】
目录
创建Controller、 Service、 Mapper、 实体类、R对象
整体介绍
技术选型

功能架构

角色

开发环境搭建
数据库环境搭建

maven项目搭建
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.zqf</groupId>
<artifactId>reggie_take_out</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.23</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.7.RELEASE</version>
</plugin>
</plugins>
</build>
</project>导入静态资源

静态资源映射配置类
package com.zqf.reggie.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@Slf4j
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
/**
* 静态资源映射
* @param registry
*/
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
log.info("开始进行静态资源映射");
//资源处理器,路径
registry.addResourceHandler("/backed/**").addResourceLocations("classpath:/backend/");
registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
}
}
后台登录功能开发
需求分析
后台员工登录对应以下这张表:
注意:
前端从返回结果里面获得这些值,这就要求服务端处理的数据含有code,data,msg。阐明了服务端处理完数据应该给服务端响应什么样的数据。

代码开发
创建Controller、 Service、 Mapper、 实体类、R对象
- 1)创建实体类Employee,和employee表进行映射
package com.zqf.reggie.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 员工实体
*/
@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;
}
- 2)创建EmployeeMapper接口
package com.zqf.reggie.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zqf.reggie.entity.Employee;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface EmployeeMapper extends BaseMapper<Employee>{
}- 3)创建Service以及实现类
package com.zqf.reggie.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zqf.reggie.entity.Employee;
public interface EmployeeService extends IService<Employee> {
}package com.zqf.reggie.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zqf.reggie.entity.Employee;
import com.zqf.reggie.mapper.EmployeeMapper;
import com.zqf.reggie.service.EmployeeService;
import org.springframework.stereotype.Service;
@Service
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper,Employee> implements EmployeeService{
}
- 创建表现层Controller
@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
}- 导入通用返回结果类R
此类是一一个通用结果类,服务端响应的所有结果最终都会包装成此种类型返回给前端页面
package com.zqf.reggie.common;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
/**
* 通用返回结果,服务端响应的数据最终都会封装成此对象
* @param <T>
*/
@Data
public class R<T> {
private Integer code; //编码:1成功,0和其它数字为失败
private String msg; //错误信息
private T data; //数据
private Map map = new HashMap(); //动态数据
//当响应成功时,返回一个R对象
public static <T> R<T> success(T object) {
R<T> r = new R<T>();
r.data = object;
r.code = 1;
return r;
}
//当响应失败时,返回一个R对象
public static <T> R<T> error(String msg) {
R r = new R();
r.msg = msg;
r.code = 0;
return r;
}
//用来操作Map动态数据
public R<T> add(String key, Object value) {
this.map.put(key, value);
return this;
}
}
梳理登录方法处理逻辑

- 登录逻辑实现
/**
* 员工登录
* @param request
* @param employee
* @return
*/
@PostMapping("/login")
public R<Employee> login(HttpServletRequest request,@RequestBody Employee employee){
//1、将页面提交的密码password进行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、登录成功,将员工id存入Session并返回登录成功结果
request.getSession().setAttribute("employee",emp.getId());
return R.success(emp);
}功能测试
(登陆成功,跳转到另一页面)略
后台系统退出功能
需求分析

代码实现
/**
* 员工退出
* @param request
* @return
*/
@PostMapping("/logout")
public R<String> logout(HttpServletRequest request){
//清理Session中保存的当前登录员工的id
request.getSession().removeAttribute("employee");
return R.success("退出成功");
}边栏推荐
- Untiy中控制Animation的播放速度
- async await如何实现并发
- What is the process of switching c read / write files from user mode to kernel mode?
- Upgrading of computing power under the coordination of software and hardware, redefining productivity
- How to effectively implement a rapid and reasonable safety evacuation system in hospitals
- Network communication protocol classification and IP address
- R language - some metrics for unbalanced data sets
- How is the JS code compiled and executed by the browser engine?
- Direct insert sort and Hill sort
- AlexNet—论文分析及复现
猜你喜欢
![[geek challenge 2019] babysql-1 | SQL injection](/img/21/b5b4727178a585e610d743e92248f7.png)
[geek challenge 2019] babysql-1 | SQL injection

Shell (II)

从0开发一个自己的npm包

一种比读写锁更快的锁,还不赶紧认识一下

Deployment and use of Minio distributed object storage

consul安装与配置

一文看懂设备指纹如何防篡改、防劫持
![[pyGame practice] the super interesting bubble game is coming - may you be childlike and always happy and simple~](/img/3b/c06c140cd107b1158056e41b954e2e.png)
[pyGame practice] the super interesting bubble game is coming - may you be childlike and always happy and simple~

Consumer installation and configuration

Cvpr2020 best paper: unsupervised learning of symmetric deformable 3D objects
随机推荐
R language uses LM function to build regression model and regression model for transformed data (for example, it is necessary to build regression model for X and y, but they have no linear relationshi
[general database integrated development environment] Shanghai daoning provides you with Aqua Data Studio downloads, tutorials, and trials
Traversal and copy of files in jar package
Cvpr2020 best paper: unsupervised learning of symmetric deformable 3D objects
一些多参数函数的具体作用
Are interviews all about memorizing answers?
Anonymous subclass objects of abstract classes
Service Workers让网站动态加载Webp图片
Four advantages of verification code to ensure mailbox security
async await如何实现并发
业务可视化-让你的流程图'Run'起来(4.实际业务场景测试)
Shell (I)
Go deadlock - when the channel meets mutex
STL の 概念及其应用
Update dev (development version) of the latest win11
可视化大型时间序列的技巧。
Localization, low latency, green and low carbon: Alibaba cloud officially launched Fuzhou data center
PFP会是数字藏品的未来吗?
Lua对table进行深拷贝
Why does acid food hurt teeth + early periodontitis