苍穹外卖》电商实战项目(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是传入的参数类型。

目录
相关文章
|
15天前
|
JavaScript Java 编译器
Java包装类和泛型的知识点详解
Java包装类和泛型的知识点的深度理解
|
21天前
|
设计模式 安全 Java
Java并发编程实战:使用synchronized关键字实现线程安全
【4月更文挑战第6天】Java中的`synchronized`关键字用于处理多线程并发,确保共享资源的线程安全。它可以修饰方法或代码块,实现互斥访问。当用于方法时,锁定对象实例或类对象;用于代码块时,锁定指定对象。过度使用可能导致性能问题,应注意避免锁持有时间过长、死锁,并考虑使用`java.util.concurrent`包中的高级工具。正确理解和使用`synchronized`是编写线程安全程序的关键。
|
4天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
23 0
|
2天前
|
消息中间件 缓存 NoSQL
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
|
2天前
|
搜索推荐 前端开发 Java
java医院绩效考核管理系统项目源码
系统需要和his系统进行对接,按照设定周期,从his系统获取医院科室和医生、护士、其他人员工作量,对没有录入信息化系统的工作量,绩效考核系统设有手工录入功能(可以批量导入),对获取的数据系统按照设定的公式进行汇算,且设置审核机制,可以退回修正,系统功能强大,完全模拟医院实际绩效核算过程,且每步核算都可以进行调整和参数设置,能适应医院多种绩效核算方式。
4 0
|
3天前
|
前端开发 Java 测试技术
Java从入门到精通:4.1.1参与实际项目,锻炼编程与问题解决能力
Java从入门到精通:4.1.1参与实际项目,锻炼编程与问题解决能力
|
7天前
|
JavaScript Java 测试技术
基于Java的直播电商交流平台的设计与实现(源码+lw+部署文档+讲解等)
基于Java的直播电商交流平台的设计与实现(源码+lw+部署文档+讲解等)
20 0
|
8天前
|
存储 Java 数据库连接
java DDD 领域驱动设计思想的概念与实战
【4月更文挑战第19天】在Java开发中,领域驱动设计(Domain-Driven Design, DDD) 是一种软件设计方法论,强调以领域模型为中心的软件开发。这种方法通过丰富的领域模型来捕捉业务领域的复杂性,并通过软件满足核心业务需求。领域驱动设计不仅是一种技术策略,而且还是一种与业务专家紧密合作的思维方式
29 2
|
9天前
|
设计模式 SQL Java
java基础知识点(初级二)
java基础知识点(初级二)
|
9天前
|
存储 Java 容器
java基础知识点(初级)
java基础知识点(初级)