当前位置:网站首页>瑞吉外卖项目实战Day01
瑞吉外卖项目实战Day01
2022-07-29 00:26:00 【白小筠】
文章目录
瑞吉外卖项目实战
1.开发环境搭建:
1.数据库环境搭建,通过运行sql代码创建下面12张表

2.maven环境搭建
pom.xml
<?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>
<groupId>com.itheima</groupId>
<artifactId>reggie_take_out</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<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>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
</project>
注意:使用boot框架的需要手动修改MySQL的版本
application.yml配置文件
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/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: "20020630"
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
2.前端资源导入
导入完成之后进行静态资源映射(如果是直接使用springboot框架就不需要进行静态资源映射)
创建一个配置类继承 WebMvcConfigurationSupport
@Slf4j
@Configuration
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/");
}
}
3.登录功能实现
1.实体类的创建:
//员工实体类
@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;
}
创建 一个返回结果类(前后端协议)
//通用的返回结果类
//服务端响应的数据最终都会封装成此对象
@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;
}
}
2.创建mapper层
创建一个接口(EmployeeMapper)继承BaseMapper
3.创建service层
创建一个接口(EmployeeService)继承IService
4.创建service的实现类(EmployeeServiceImpl)
继承ServiceImpl<EmployeeMapper, Employee>实现 EmployeeService接口
5.Cotroller层代码实现
@RestController
@RequestMapping("/employee")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
//员工登录
@PostMapping("/login")
public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee){
//将页面提交的密码进行MD5加密处理
String password = employee.getPassword();
password=DigestUtils.md5DigestAsHex(password.getBytes());
//根据用户名查询数据库
LambdaQueryWrapper<Employee> lambdaQueryWrapper=new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(Employee::getUsername,employee.getUsername());
//用户名设置了唯一约束
Employee emp = employeeService.getOne(lambdaQueryWrapper);
//判断用户名是否存在
if (emp==null){
return R.error("登录失败");
}
//密码比对
if (!emp.getPassword().equals(password)){
return R.error("登录失败");
}
//查看账号状态是否被禁用
if (emp.getStatus()==0){
return R.error("账号已禁用");
}
//登录成功,将用户的id存入Session中
HttpSession session = request.getSession();
session.setAttribute("employee",emp.getId());
return R.success(emp);
}
}
4.用户退出
//用户退出
@PostMapping("/logout")
R<String> logOut(HttpServletRequest request){
//清除数据
request.getSession().removeAttribute("employee");
return R.success("退出成功");
}
5.完善登录功能
添加拦截器(当用户没有登录不能进入首页)
@Slf4j
//检查用户是否完成登录
@WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*")
public class LoginCheckFilter implements Filter {
//路径匹配器,支持通配符
private static final AntPathMatcher PATH_MATCHER=new AntPathMatcher();
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest)servletRequest;
HttpServletResponse response=(HttpServletResponse) servletResponse;
//定义不需要处理的请求路径
String []urls=new String[]{
"/employee/login",
"employee/logout",
"/backend/**",
"/front/**"
};
//获取本次请求的uri
String requestURI = request.getRequestURI();
//判断此次请求是否需要处理
log.info("拦截到路径"+requestURI);
boolean check = check(urls, requestURI);
if (check){
//放行
filterChain.doFilter(request, response);
return;
}
//检查登录状态
if (request.getSession().getAttribute("employee")!=null){
//已经登录
//放行
filterChain.doFilter(request, response);
return ;
}
//未登录
response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));//request.js9
return ;
}
//判断请求是否需要处理的方法
public boolean check(String[] urls,String requestURI) {
for (String url : urls) {
boolean match = PATH_MATCHER.match(url, requestURI);
if (match) {
return true;
}
}
return false;
}
}
注意:要想
@WebFilter注解生效,需要在配置类上标注另外一个注解@ServletComponentScan用于扫描使其生效
边栏推荐
- Naver three party login
- 过去10年的10起重大网络安全事件
- Cookies and sessions
- 时间复杂度、空间复杂度的学习总结
- 18 diagrams, intuitive understanding of neural networks, manifolds and topologies
- Docuware mobile labor solution can help you build a new productivity model: anytime, anywhere, any device
- API stability guarantee of Prometheus
- Introduction to FLV documents
- Spark 3.0 中七个必须知道的 SQL 性能优化
- nep 2022 cat
猜你喜欢

教你一文解决 js 数字精度丢失问题

测试/开发程序员靠技术渡过中年危机?提升自己本身的价值......

How to carry out engineering implementation of DDD Domain Driven Design

ACM SIGIR 2022 | interpretation of selected papers of meituan technical team

【SQL之降龙十八掌】01——亢龙有悔:入门10题

过去10年的10起重大网络安全事件

nep 2022 cat

Day2: 130 questions in three languages

Self-attention neural architecture search for semantic image segmentation

J9数字论:什么因素决定NFT的价值?
随机推荐
Flink SQL Hudi 实战
LeTax记录\documentclass{},authoryear属性使用
数字孪生轨道交通:“智慧化”监控疏通城市运行痛点
solidity实现智能合约教程(5)-NFT拍卖合约
[leetcode sliding window problem]
dart数组,Map,类型判断,条件判断运算符,类型转换
Visual full link log tracking
一元函数积分学之1__不定积分
图扑软件亮相 2022 福州数博会,携手共创数字新时代
Flask project construction 2
【Jenkins笔记】入门,自由空间;持续集成企业微信;allure报告,持续集成电子邮件通知;构建定时任务
Prometheus 的 API 稳定性保障
DocuWare 移动劳动力解决方案可帮助您构建新的生产力模式:随时随地、任何设备
【mysql】多指标历史累计去重问题
一文搞懂ES6基本全部语法
Django reports an error using pymsql module django.db.utils.operationalerror
ACM SIGIR 2022 | interpretation of selected papers of meituan technical team
C语言300行代码实现扫雷(可展开+可标记+可更改困难级别)
mysql分表之后怎么平滑上线?
How to check the redis Version (check the redis process)