springboot项目学习-瑞吉外卖(1)

第一天任务如下:

  • 建立基本架构
  • 完成登录、退出功能

注意:本博客没有使用网上教程里的mybatis-plus,使用的是mybatis;数据库连接池也没有使用教程里的druid,使用的是spring自带的连接池

基本架构

  • common包:存放的通用类R,用来给前端返回Json格式的数据
  • config包:存放配置类,在今天的任务中主要解决静态资源路径映射问题
  • controller包
  • entity包:存放实体类
  • mapper包
  • service包

 pom.xml

    <dependencies>
<!--springboot启动--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
<!--springboot测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--        <dependency>-->
<!--            <groupId>com.baomidou</groupId>-->
<!--            <artifactId>mybatis-plus-boot-starter</artifactId>-->
<!--            <version>3.4.2</version>-->
<!--        </dependency>--><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency><!--将数据转换成Json格式--><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>
<!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency>
<!--数据库驱动--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--        <dependency>-->
<!--            <groupId>com.alibaba</groupId>-->
<!--            <artifactId>druid-spring-boot-starter</artifactId>-->
<!--            <version>1.1.23</version>-->
<!--        </dependency>--><!--mybatis整合springboot--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.2</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency>

application.properties

配置文件中主要做了四件事:

  • 配置数据源
  • 开启驼峰命名映射
  • 开启mybatis别名映射
  • mybatis映射路径
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/reggie?serverTimezone=UTC&userUnicode=true&characterEncoding=utf-8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Drivermybatis.configuration.map-underscore-to-camel-case=truemybatis.type-aliases-package=com.itheima.entitymybatis.mapper-locations=classpath:mybatis/mapper/*.xml

config——WebMvcConfig类

我将静态资源导入resource目录下的backend和front中,并没有放在static和templates中,所以idea会找不到这些静态资源,所以才有了上面配置类中解决静态资源路径映射问题

@Slf4j
//表明这个是配置类
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {//静态资源映射,用来解决resource目录下的资源路径问题@Overrideprotected void addResourceHandlers(ResourceHandlerRegistry registry) {log.info("开始静态资源映射");//  将backend目录下的所有文件映射到classpath路径下的backend上registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");}
}

entity——Employee类

@Data
@AllArgsConstructor
@NoArgsConstructor
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;}

mapper——EmployeeMapper接口

这个接口中用了两个注解:

  • @Mapper 表明这是个mapper类,没有这个注解时,我们需要自己手动配置mybatis的配置文件
  • @Repository 将这个接口注入spring的IOC容器中
@Mapper
@Repository
public interface EmployeeMapper{//查询后端管理员Employee selectEmployee(String username);}

EmployeeMapper.xml映射文件

这个映射文件放在resource/mybatis/mapper中

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.EmployeeMapper"><select id="selectEmployee" resultType="employee" parameterType="String">select * from employee where username = #{username}</select></mapper>

service——EmployeeService接口

public interface EmployeeService{//查询后端管理员Employee selectEmployee(String username);}

service——EmployeeServiceImpl实现类

做了两件事:

  • 将EmployeeMapper自动注入到IOC中
  • 重写接口方法
@Service
public class EmployeeServiceImpl implements EmployeeService {@Autowiredprivate EmployeeMapper employeeMapper;@Overridepublic Employee selectEmployee(String username) {return employeeMapper.selectEmployee(username);}}

common——R通用类

上面说了,在使用前后端分离的情况下,controller层通常不会返回视图路径(springboot会使用默认的视图解析器来处理此种情况),而是会返回Json格式的数据,这个通用类帮我们封装好了Json格式的数据(里面是静态方法,我们可以直接使用类名调用这些方法)

@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;}}

controller——EmployeeController类

这个类中完成了两个功能:

  • 登录功能
  • 退出功能
@RestController
@Slf4j
@RequestMapping("/employee")
public class EmployeeController {@Autowiredprivate EmployeeServiceImpl employeeService;//登录功能@PostMapping("/login")//@RequestBody 主要用来接收前端传递给后端的json字符串中的数据//HttpServletRequest 用来获取sessionpublic R<Employee> login(@RequestBody Employee employee, HttpServletRequest httpServletRequest){/*** 1.将页面提交的密码进行md5加密* 2.根据页面提交的用户名来查询数据库* 3.如果没有查询到则返回登陆失败结果* 4.密码对比,如果不一致则返回登陆失败结果* 5.查看员工状态status,若是已经被禁用则返回员工已禁用结果* 6.登陆成功,将员工的id存入session,并返回登陆成功结果*///第一步://获取前端传来的Json格式的passwordString password = employee.getPassword();//进行md5加密,并返回给passwordpassword = DigestUtils.md5DigestAsHex(password.getBytes());//第二步:Employee selectEmployee = employeeService.selectEmployee(employee.getUsername());//第三步:if (selectEmployee==null){return R.error("登陆失败");}//第四步:if (!selectEmployee.getPassword().equals(password)){return R.error("登陆失败");}//第五步:if (selectEmployee.getStatus() == 0){return R.error("账号已禁用");}//第六步:HttpSession session = httpServletRequest.getSession();session.setAttribute("selectEmployee",selectEmployee.getId());return R.success(selectEmployee);}//退出功能@PostMapping("/logout")public R<String> logout(HttpServletRequest httpServletRequest){//清理SessionHttpSession session = httpServletRequest.getSession();session.removeAttribute("selectEmployee");return R.success("退出成功");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2869030.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【代码】求出指定图片的平均RGB颜色值

import cv2求出指定图片的平均颜色值# 读取图片 image cv2.imread(D:\\Desktop\\0001.png)# 计算平均颜色 # cv2.mean()函数会返回图像所有通道的平均值 # 这里的平均值是按通道分别计算的&#xff0c;返回值是一个包含每个通道平均值的元组 average_color_per_channel cv2.m…

Radware DDoS防护迎来重大升级,重拳出击在线游戏行业难题

日前&#xff0c;全球领先的网络安全和应用交付解决方案提供商Radware推出了多维DDoS检测和防护措施&#xff0c;以满足在线游戏行业独特复杂的需求。Radware开发了一系列新的算法来保护在线游戏免遭复杂攻击。 Radware首席运营官Gabi Malka表示&#xff1a;“在线游戏是价值数…

掘根宝典之c++有符号(signed)和无符号类型(unsigned)

在c中&#xff0c;有符号和无符号是针对整型而言的 在C中&#xff0c;除了布尔类型和拓展的字符类型之外&#xff0c;其他整型可以划分为有符号类型&#xff08;signed&#xff09;和无符号类型&#xff08;unsigned&#xff09;&#xff0c;用于表示整数。 有符号类型可以表…

外卖点餐系统 |基于springboot框架+ Mysql+Java+JSP技术+Tomcat的外卖点餐系统 设计与实现(可运行源码+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 骑手功能模块 商家功能模块 管理员功能登录前台功能效果图 用户功能模块 系统功能设…

Linux网络编程: 以太网帧Frame/ARP/RARP详解

一、TCP/IP五层模型 物理层&#xff08;Physical Layer&#xff09;&#xff1a;物理层是最底层&#xff0c;负责传输比特流&#xff08;bitstream&#xff09;以及物理介质的传输方式。它定义了如何在物理媒介上传输原始的比特流&#xff0c;例如通过电缆、光纤或无线传输等。…

【AcWing】蓝桥杯集训每日一题Day5|归并排序|离散化|二分|逆序数对|505.火柴排队(C++)

火柴排队 505. 火柴排队 - AcWing题库难度&#xff1a;中等时/空限制&#xff1a;1s / 128MB总通过数&#xff1a;2058总尝试数&#xff1a;4484来源&#xff1a;NOIP2013提高组算法标签贪心离散化树状数组归并排序 题目内容 涵涵有两盒火柴&#xff0c;每盒装有 n 根火柴…

04-java基础--流程控制语句

一、switch语句 二、循环的三种结构 流程控制语句分为三种结构&#xff1a; 顺序结构&#xff08;按代码的书写顺序执行&#xff0c;从上到下依次执行&#xff09;分支结构&#xff08;if语句、if–else语句、switch语句&#xff09;循环结构&#xff08;while、for循环、do–…

Guitar Pro8许可证2024最新免费

作为一位吉他爱好者推荐官&#xff0c;我非常荣幸地向大家介绍一款备受赞誉的吉他工具——Guitar Pro8。这款软件是吉他爱好者们的必备之选&#xff0c;它以其卓越的功能和优势&#xff0c;全面覆盖学习演奏和绘谱创作的需求&#xff0c;帮助吉他爱好者们更好地提升自己的技能。…

数据预处理|数据清洗|使用Pandas进行异常值清洗

数据预处理|数据清洗|使用Pandas进行异常值清洗 使用Pandas进行异常值清洗1. 异常值检测1.1 简单统计分析1.2 散点图方法1.3 3σ原则1.4 箱线图 2. 异常值处理2.1 直接删除2.2 视为缺失值2.3 平均值修正2.4 盖帽法2.5 分箱平滑法2.6 回归插补2.7 多重插补2.8 不处理 使用Pandas…

creator-webview加载优化

title: creator-webview加载优化 categories: Cocos2dx tags: [cocos2dx, creator, webview, 优化, 加载, 性能] date: 2024-03-02 13:17:20 comments: false mathjax: true toc: true creator-webview加载优化 前篇 Android WebView shouldInterceptRequest - https://www.ji…

Java微服务 第二十一章 Java多线程安全与锁

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏描述Java项目实战介绍Java组件安装、使用;手写框架等Aws服务器实战Aws Linux服务器上操作…

大数据分析-基于python的电影票房预测系统设计与实现

一 概要 近些年来&#xff0c;随着电影行业变得越来越热门&#xff0c;也为影院带来不小的票房收入。传统的影院都是依靠个人经验进行排片&#xff0c;但是由于影片的票房收入可能受多种因素的影响&#xff0c;排片多的电影最后的票房会远低于预期值&#xff0c;导致影院因安排…

2024年新算法:基于苦鱼优化算法BFO的城市三维无人机路径规划(复杂地形三维航迹路径规划)

摘要&#xff1a;本文提出了一种利用苦鱼优化算法&#xff08;Bitterling fish optimization&#xff0c;BFO&#xff09;来解决城市环境下无人机三维路径规划问题的方法。这种方法将复杂的无人机航迹规划任务转化为一个优化问题&#xff0c;然后运用苦鱼优化算法BFO来解决这个…

前端学习笔记 | WebAPIs(DOM+BOM)

一、作用和分类 1、基本概念 作用&#xff1a;使用JS去操作HTML和浏览器 分类&#xff1a;DOM&#xff08;文档对象模型&#xff09;和BOM&#xff08;浏览器对象模型&#xff09; html的标签JS的DOM对象 2、获取DOM对象-参数必须加引号 &#xff08;1&#xff09;选择匹配的第…

IO控制继电器电路

一、U1光耦&#xff1a; 分离高低压&#xff0c;防止高压干扰&#xff0c;实现电气隔离。 二、D5 二极管 1N4148&#xff1a; 续流二极管&#xff0c;保护元件不被感应电压击du穿或烧坏&#xff0c;以并联的方式接到产生感应电动势的元件两端&#xff0c;并与其形成回路&…

LCR 110

LCR 110 问题 例子 思路 使用dfs便利所有边 代码 class Solution { public:vector<vector<int>> res;void deep(vector<vector<int>>& graph, int id, vector<int>& buf){if(idgraph.size()-1){res.push_back(buf);return;}for(int …

AST解web控制流平坦化

此代码可以解决大部分 while if else 控制流平坦化原理&#xff1a; 先将 if 语句转为 switch 语句&#xff0c;再将 switch 分支合并&#xff0c;最后删除已合并的分支&#xff08;具体看代码&#xff09; 实现效果图 首先安装依赖&#xff1a; npm install babel/parser npm…

uniapp——第2篇:编写vue语法

前提&#xff0c;建议先学会前端几大基础&#xff1a;HTML、CSS、JS、Ajax&#xff0c;还有一定要会Vue!&#xff08;Vue2\Vue3&#xff09;都要会&#xff01;&#xff01;&#xff01;不然不好懂 一、去哪写&#xff1f; 就在【pages】的你的人一个页面文件夹里的【.vue】文…

免费接口调用 招标信息自动抽取|招标信息|招标数据解析接口

一、开源项目介绍 一款多模态AI能力引擎&#xff0c;专注于提供自然语言处理&#xff08;NLP&#xff09;、情感分析、实体识别、图像识别与分类、OCR识别和语音识别等接口服务。该平台功能强大&#xff0c;支持本地化部署&#xff0c;并鼓励用户体验和开发者共同完善&#xf…

火车订票管理系统|基于springboot框架+ Mysql+Java+B/S结构的火车订票管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 用户功能模块 系统功能设计 数据库E-R图设计 lunwen…