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://www.mzph.cn/news/749258.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Xml文件解析

Xml文件解析 在Python中解析XML文件通常使用标准库中的xml.etree.ElementTree模块&#xff0c;或者使用第三方库如lxml。下面将分别介绍使用这两种方法来解析XML文件。 使用xml.etree.ElementTree解析XML文件 xml.etree.ElementTree是Python的内置库&#xff0c;用于解析XML文…

【Linux进程状态】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、直接谈论Linux的进程状态 看看Linux内核源代码怎么说 1.1、R状态 -----> 进程运行的状态 1.2、S状态 -----> 休眠状态(进程在等待“资源”就绪) 1.3、T状…

奇怪的比赛(Python,递归,状态压缩动态规划dp)

目录 前言&#xff1a;题目&#xff1a;思路&#xff1a;递归&#xff1a;代码及详细注释&#xff1a; 状态压缩dp&#xff1a;代码及详细注释&#xff1a; 总结&#xff1a; 前言&#xff1a; 这道题原本是蓝桥上的题&#xff0c;现在搜不到了&#xff0c;网上关于此题的讲解…

echo,date,bc命令详解

文章目录 echo&#xff0c;date&#xff0c;bc命令详解echo(输出文本)date(显示日期的命令)date命令的--date选项date命令 bc(高精度计算器) echo&#xff0c;date&#xff0c;bc命令详解 echo(输出文本) echo命令是一个常用的Shell命令&#xff0c;用于在终端上输出文本。它…

Python爬虫:原理与实战

引言 在当今的信息时代&#xff0c;互联网上的数据如同浩瀚的海洋&#xff0c;充满了无尽的宝藏。Python爬虫作为一种高效的数据抓取工具&#xff0c;能够帮助我们轻松地获取这些数据&#xff0c;并进行后续的分析和处理。本文将深入探讨Python爬虫的原理&#xff0c;并结合实战…

企业的数据治理如何评估

在数字化时代&#xff0c;企业对数据的管理和利用已经成为了一个关键的竞争力。通过有效的数据治理&#xff0c;企业能够更好地理解、分析和应用数据&#xff0c;从而提升决策的准确性和效率。然而&#xff0c;要构建一个高效可靠的数据管理体系&#xff0c;并进行评估&#xf…

acp认证考试费用多少?

2023年阿里云大数据ACP认证费用为1200元。请注意&#xff0c;此费用涵盖一次考试机会&#xff0c;若未能通过考试&#xff0c;需要重新缴费才能再次参加考试。 二、考试方式与地点 阿里云大数据ACP认证考试采用线上或线下考试方式。无论你身在何处&#xff0c;都可以方便地参…

Docker环境快速搭建RocketMq

window上面安装&#xff1a; 1.Namesrv docker pull rocketmqinc/rocketmq创建C:/docker/rocketmq/data/namesrv/logs:/root/logs C:/docker/rocketmq/data/namesrv/store:/root/store 目录 namesrv: docker run -d --restartalways --name rmqnamesrv -p 9876:9876 -v C:/do…

kkview远程控制: 内网远程桌面控制软件

内网远程桌面控制软件&#xff1a;高效、安全的远程管理方案 在信息技术日新月异的今天&#xff0c;内网远程桌面控制软件已成为许多企业和个人用户不可或缺的工具。这类软件允许用户通过内部网络&#xff0c;实现对其他计算机的远程访问和控制&#xff0c;从而大大提高工作效…

LLM大语言模型(七):部署ChatGLM3-6B并提供HTTP server能力

目录 HighLight 部署ChatGLM3-6B并开启HTTP server能力 下载embedding模型bge-large-zh-v1.5 HTTP接口问答示例 LLM讲了个尴尬的笑话~ HighLight 将LLM服务化&#xff08;如提供HTTP server能力&#xff09;&#xff0c;才能在其上构建自己的应用。 部署ChatGLM3-6B并开启…

[Windows] Win11 常用快捷键

文章目录 &#x1f680; [Windows] Win11 常用快捷键&#x1f310; Windows 操作系统&#x1f525; Windows 11 &#x1f310; Windows 11 快捷键概览&#x1f525; 基本快捷键&#x1f525; 窗口快捷键&#x1f525; 功能快捷键 &#x1f4dd; 小结 &#x1f680; [Windows] W…

工欲善其事,必先利其器,Markdown和Mermaid的梦幻联动(2)

该文章Github地址&#xff1a;https://github.com/AntonyCheng/typora-notes/tree/master/chapter03-mermaid 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文…

C#编程语言在软件开发中的深度应用与实践

C#编程语言在软件开发中的深度应用与实践 一、引言 C#是一种现代、通用、面向对象的编程语言&#xff0c;由微软公司开发&#xff0c;并作为.NET框架的主要编程语言。它广泛应用于桌面应用程序、游戏开发、Web服务和云计算等多个领域。本文将探讨使用C#进行软件开发的深层次思路…

QT6 界面中嵌入第三方程序中的窗口

本文描述QT6 界面中嵌入第三方程序中的窗口。 第三方程序也是用QT6编写。 QT的编译器版本都为QT6.2.4 MSVC2019 64 bit 第三方程序为QT写的能调试成功。但不是QT写的还不可以。 使用场景:将软件分成几个模块&#xff0c;多人写或者一个人先后写。 1.头文件 #ifndef PAREN…

数字航海与网络深渊:探索出海策略中的技术维度

在这个数字化加速的时代&#xff0c;"出海"已经成为企业寻求新机遇、拓展全球视野的关键行动。而在这一进程中&#xff0c;SOCKS5代理、代理IP、跨界电商、游戏技术以及网络安全构成了出海航程中的核心技术舵手。这些技术不仅是航行工具&#xff0c;更是深渊中的指南…

ChatGPT 遇到对手:Anthropic Claude 语言模型的崛起

ChatGPT 遇到对手&#xff1a;Anthropic Claude 语言模型的崛起 。 这个巨大的上下文容量使 Claude 2.1 能够处理更大的数据体。用户可以提供复杂的代码库、详细的财务报告或广泛的作品作为提示。然后 Claude 可以连贯地总结长文本&#xff0c;基于文档进行彻底的问答&#x…

“技多不压身”是什么意思?看完这篇文章你会明白:有了手艺,走遍天下都不怕!

“技多不压身”是什么意思&#xff1f;看完这篇文章你会明白&#xff1a;有了手艺&#xff0c;走遍天下都不怕&#xff01; 咱们的老祖宗流传一句话&#xff1a;“一招鲜&#xff0c;吃遍天。”这话说得直白&#xff0c;却道出了学一门手艺或技术对于人生的重要性。“李秘书讲…

系统设计学习(四)海量数据

十一&#xff0c;百亿数据中找中位数 桶/计数排序思想 根据数据的特征&#xff0c;比如数据落在某个固定范围内&#xff0c;可以使用桶排序或计数排序的思想。通过统计每个桶内元素的数量&#xff0c;我们可以确定中位数所在的桶&#xff0c;然后在该桶内使用更精确的方法计算中…

使用Loadrunner进行性能测试

一、确定性能测试的范围、要求、配置、工具等 明确测试的系统&#xff1a; 本文档主要指的是web应用。 明确测试要求&#xff1a; 用户提出性能测试&#xff0c;例如&#xff0c;网站首页页面响应时间在3S之内&#xff0c;主要的业务操作时间小于10s&#xff0c;支持300用户在…

Android Studio实现内容丰富的安卓宠物用品商店管理系统

获取源码请点击文章末尾QQ名片联系&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号128 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.系统公告 3.宠物社区&#xff08;可发布宠物帖子&#…