当前位置:网站首页>瑞吉外卖项目实战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用于扫描使其生效
边栏推荐
- How to carry out engineering implementation of DDD Domain Driven Design
- Main causes of IT hardware failures and best practices for prevention
- Brushless DC motor controller (how much is the hall charge for changing the motor)
- Seven SQL performance optimizations that spark 3.0 must know
- Google Play APK 上传其他国际应用商店
- PlatoFarm社区生态福音,用户可借助Elephant Swap获得溢价收益
- nep 2022 cat
- Docker compose install MySQL
- 一篇万字博文带你入坑爬虫这条不归路 【万字图文】
- Summary of process and thread knowledge points 2
猜你喜欢

MySQL stored procedure realizes the creation of a table (copy the structure of the original table and create a new table)

Flink SQL Hudi 实战

Hilbert 变换与瞬时频率

Summary of process and thread knowledge points 2

Interviewer: programmer, please tell me who leaked the company interview questions to you?

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

面试官:程序员,请你告诉我是谁把公司面试题泄露给你的?

20220728-不纯为数字的字符串排序
![[idea] where to use the query field](/img/63/f95868907364fc949885c67c34ba32.png)
[idea] where to use the query field

Learning summary of time complexity and space complexity
随机推荐
RHCE命令练习(一)
RHCE command practice (II)
【ManageEngine】助力哈尔滨工程大学实现网络流量一体化监控管理
Writing assignment 1
Letax record \documentclass{}, authoryear attribute is used
可视化全链路日志追踪
The digitalization of the consumer industry is upgraded to "rigid demand", and weiit's new retail SaaS empowers enterprises!
表达式求值
solidity实现智能合约教程(5)-NFT拍卖合约
dart数组,Map,类型判断,条件判断运算符,类型转换
Django使用MySQL数据库已经存在的数据表方法
RHCE命令练习(二)
J9数字论:什么因素决定NFT的价值?
Docuware mobile labor solution can help you build a new productivity model: anytime, anywhere, any device
一元函数积分学之1__不定积分
教你一文解决 js 数字精度丢失问题
uniapp movable-view表格缩放过程想保持容器高度不变的解决办法
Groundwater, soil, geology and environment
PLATO上线LAAS协议Elephant Swap,用户可借此获得溢价收益
时间复杂度、空间复杂度的学习总结