当前位置:网站首页>瑞吉外卖项目实战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用于扫描使其生效
边栏推荐
- ThinkPHP high imitation blue cloud disk system program
- Oozie job scheduling
- Flink SQL Hudi 实战
- Day2: 130 questions in three languages
- Self-attention neural architecture search for semantic image segmentation
- Django uses the existing data table method of MySQL database
- PLATO上线LAAS协议Elephant Swap,用户可借此获得溢价收益
- vm options、program arguments、environment property
- Naver 三方登录
- Groundwater, soil, geology and environment
猜你喜欢

Flink Postgres CDC

18 diagrams, intuitive understanding of neural networks, manifolds and topologies

跨模态对齐 20220728

How to deal with the time, scope and cost constraints in the project?

SQL question brushing: find the current salary details and department number Dept_ no

图扑软件亮相 2022 福州数博会,携手共创数字新时代

nep 2022 cat

Solid smart contract tutorial (5) -nft auction contract

Summary of process and thread knowledge points 2

Expression evaluation
随机推荐
Cookies and sessions
How to deal with the time, scope and cost constraints in the project?
Naver 三方登录
正则表达式
Main causes of IT hardware failures and best practices for prevention
Synchronized keyword details
Numpy 常见函数及使用
日期转换 EEE MMM dd HH:mm:ss zzz yyyy
18张图,直观理解神经网络、流形和拓扑
Prometheus 的 API 稳定性保障
System Verilog common syntax
【SQL之降龙十八掌】01——亢龙有悔:入门10题
【mysql】字符串转int
Flink Postgres CDC
Subtotal of process thread coordination
JS judge whether array / object array 1 contains array / object array 2
[leetcode sliding window problem]
Recursion and divide and conquer
Naver three party login
Error reporting: SQL syntax error in flask. Fields in SQL statements need quotation marks when formatting