苍穹外卖》电商实战项目(java)知识点整理(下)

简介: 苍穹外卖》电商实战项目(java)知识点整理(下)

三、模块开发

3.1 (新增员工)分析设计P16

一般是对产品原型(静态HTML页面)分析,因为比较直观。思考录入项有没有什么限制。

image.png

密码采用默认密码,登录后可以进行修改。

 

接口定义如下(data一般是查询是会用到,msg一般是出错时会返回消息):

image.png

数据库设计如下:

image.png

3.2 (新增员工)代码开发P17

注意:当前端提交的数据和实体类中对应的属性差别较大时(也就是实体类中会有多余的属性),建议使用DTO来封装(DTO里的数据字段和前端提交的数据字段都能对应上)。

 

1.在EmployeeController中新建一个方法save,传入的参数是employeeDTO

 

1. 首先编写如下代码,是网页端读入的字段数据,在这里传入employeeService对象。有2点注意事项:①前端传入的数据是json格式,要用@RequestBody注解转换为对象。②为了方便调试加一个log.info,花括号{}的内容在后面会被替换为employeeDTO的值。

image.png

2. 在EmployeeService中编写如下代码,思路是:先创建一个emloyee实体类,然后把DTO的数据拷贝到实体类中,然后对剩下的属性进行赋值。

image.png

有2个注意事项:①可以用BeanUtils工具类中的copyProperties方法来对对象进行拷贝,前提是对象的属性有一部分是相同的。②不应该直接用数字数字,否则会是硬编码,应该使用StatusConstant常量类。

 

3. 在EmployeeMapper中编写SQL语句,来将数据插入数据库:

image.png

3.3 (新增员工)功能测试P18

在开发阶段,前端界面可能没有开发好,所以不能进行前后端联调测试,只能用接口文档进行测试。

 

下面进行测试出现401,是因为有拦截器进行了拦截,原因是缺少token令牌:

 

image.png

3.4 (新增员工)完善P19-20

问题1:录入的用户名已存在,抛出异常后没有处理,没处理的话,控制台会抛出错误P19。

 

用全局的异常处理器sky-server/handler/GlobalExceptionHandler,创建exceptionHandler方法,在方法里添加如下代码:


目的是输出:xxx已经存在的提示。核心思想是:提取错误那段话的第3个词,然后拼接后输出。


JWT认证机制:用户发起请求发送用户名和密码,后端进行校验,如果验证通过就生成JWT Token,将Token返回给客户端,客户端会保存Token,在后续请求的请求头中都会携带JWT Token,请求会被拦截器拦截到,会检查Token,如果通过就会展示数据,如果没有通过就会返回错误信息。

 

 

 

在拦截请求验证的时候可以获得JWT令牌

 

问题是:在解析出登录员工id后如何传递给Service的save方法?

 

答:通过ThreadLocal,它是Thread的局部变量,为每个线程提供单独一份的存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,在线程外则不能访问。

 

可以通过在controller、service和拦截器中输出线程的id来看是否单次请求是同一个线程,经实验验证是同一个线程。

 


在sky-common/src/main/java/context/BaseContext下封装了ThreadLocal的操作。

 

先在拦截器JwtTokenAdminInterceptor里将ID存到存储空间里(set),因为每次请求线程不变,所以存储空间的值不会被更改,因此可以在EmployeeServiceImpl类中取到该值(get),进而输出,很妙!


3.5 (分页查询)分析设计P21

分页展示,每页展示10条数据,可以输入员工姓名进行查询。total是总的数目,records是一页的条目数。


3.6 (分页查询)代码开发P22

下面是PageResult和EmployeePageQueryDTO的实体类定义:


Result<PageResult>是在PageResult的基础上加上code和msg,作为返回给前端的对象。

 

在EmployeeController添加一个方法



PageHelper的startPage方法可以通过传入的参数自动设置Limit,传入的是页码和每页的记录数,好处是:字符串的拼接不用自己做。底层实现是:它会给ThreadLocal设置上述参数,然后在执行SQL语句时会自动被取出,然后拼接成Limit。

 

Page是PageHelper插件定义的一个泛型类,是一个固定的返回类型。

 

pagehelper可以简化分页代码的编写:


在EmployeeMapper.xml中编写SQL语句,limit不用我们手写,pagehelper会自动帮我们追加拼接,order by是排序条件:


如果有传入name,代表是员工姓名查询,它只会返回带有相关词(字也可以,因为是模糊查询)的员工信息。

 

 

 

如果没有传入name,那么name就为空,<if>判断内容不执行,<where>默认返回1,所以它会查询所有employee元素。

 

 

 

在这里是模糊查询,用concat将name与%进行拼接,%的意思是匹配任意字符串/字符。

 

<select>标签的id是mapper中的对应方法名。resultType是传入的参数类型。

目录
相关文章
|
3月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
386 1
|
2月前
|
安全 Java 开发者
告别NullPointerException:Java Optional实战指南
告别NullPointerException:Java Optional实战指南
259 119
|
3月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
376 0
|
4月前
|
前端开发 Java API
2025 年 Java 全栈从环境搭建到项目上线实操全流程指南:Java 全栈最新实操指南(2025 版)
本指南涵盖2025年Java全栈开发核心技术,从JDK 21环境搭建、Spring Boot 3.3实战、React前端集成到Docker容器化部署,结合最新特性与实操流程,助力构建高效企业级应用。
1312 1
|
4月前
|
Java 关系型数据库 数据库
Java 项目实战教程从基础到进阶实战案例分析详解
本文介绍了多个Java项目实战案例,涵盖企业级管理系统、电商平台、在线书店及新手小项目,结合Spring Boot、Spring Cloud、MyBatis等主流技术,通过实际应用场景帮助开发者掌握Java项目开发的核心技能,适合从基础到进阶的学习与实践。
532 3
|
4月前
|
缓存 前端开发 Java
基于最新 Java 技术栈的在线任务管理系统开发实战详解
本项目基于最新Java技术栈开发在线任务管理系统,涵盖任务创建、分配、跟踪、统计等功能。采用Spring Boot 3.2.x、React 18、PostgreSQL 16等主流技术,详解项目架构设计、核心功能实现及部署流程,助力掌握现代Java全栈开发技能。
287 6
|
4月前
|
Java API Maven
2025 Java 零基础到实战最新技术实操全攻略与学习指南
本教程涵盖Java从零基础到实战的全流程,基于2025年最新技术栈,包括JDK 21、IntelliJ IDEA 2025.1、Spring Boot 3.x、Maven 4及Docker容器化部署,帮助开发者快速掌握现代Java开发技能。
854 1
|
3月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
449 100
|
4月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
4月前
|
消息中间件 Java 数据库
Java 基于 DDD 分层架构实战从基础到精通最新实操全流程指南
本文详解基于Java的领域驱动设计(DDD)分层架构实战,结合Spring Boot 3.x、Spring Data JPA 3.x等最新技术栈,通过电商订单系统案例展示如何构建清晰、可维护的微服务架构。内容涵盖项目结构设计、各层实现细节及关键技术点,助力开发者掌握DDD在复杂业务系统中的应用。
730 0