https://www.bilibili.com/video/BV1At421K7gP
资料:https://pan.baidu.com/s/18gU7FbbHdv9vRLnPIywl2g?pwd=yyds 提取码:yyds

1. 进度

  1. 第29集“安装vmware”开始安装虚拟机,之前都是理论。
  2. 第49集配置虚拟机nat,第50集配置虚拟机静态ip。
  3. 第51集“准备linux虚拟机“开始安装软件,之前都是理论。
  4. 第57集“mybatisplus-springboot集成”第一次用idea。
  5. 第11集数据库设计流程。数据库设计流程:概念模型设计,逻辑模型设计,物理模型设计。
  6. 第13集逻辑设计-公寓信息,非常重要,数据库设计示例。一个很简单的逻辑可能设计也很复制,这个项目一共有28张表。
  7. 第85集开始项目开发。
  8. 第106集地区信息,省市区三级联动。
  9. 第107集上传图片。
  10. 第111集全局异常处理。
  11. 第116集分页查询。
  12. 第118集动态sql。
  13. 第124集看房预约。
  14. 第130集定时任务。
  15. 第139集登录管理。
  16. 第147集threadlocal。

2. 原型

  1. 项目开发流程:产品经理生成产品需求和产品原型;设计师设计外观和交互得到高保真原型;架构师规划整体架构,数据库设计和接口设计,输出api文档;前后端根据api文档开发;测试;部署和运维。
  2. 项目包括客户端和后台管理系统。客户端提供了房源模块和个人中心模块。房源模块包括房源展示和检索,个人中心包括浏览历史,看法预约,我的租约(续约)功能。后台管理系统提供了公寓管理,租赁管理,后台用户管理,客户端用户管理。
  3. 产品原型非常重要,数据库设计和接口设计的根据都是产品原型。
  4. 数据库模型最常见的是实体关系模型(entity relationship,er),将数据表示为实体和实体间的关系。每个实体都有一组属性,实体间的关系包括1:1,1:n和n:n。一对多 多的一侧加外键 多对多 用一个表连接。

3. 软件

  1. jdk版本为17,springboot版本为3.0.9。
  2. 本地windows和远程linux均安装jdk(一个开发用,一个部署用),远程linux安装mysql、redis等等,本地idea项目中配置远程的mysql等的地址,最后本地代码打包jar,放到远程linux上运行。因为java是跨平台的,所以可以在windows上开发,linux部署。
  3. 后期可以使用docker容器化部署。
  4. 前端访问主要向后端请求静态资源和后端接口,先静态资源然后请求后端接口。静态资源包括html,css文件,图片等,后端接口主要是数据(json)。静态资源的http服务器是nginx,后端接口的http服务器是springboot(tomcat)。
  5. mysql,innodb,数字表示。
  6. 增删改查crud接口,新增和修改可以合二为一。
  7. 测试分两个阶段,一个叫后端功能测试,一个叫对接前端

4. 内容

  1. 项目包括:公寓房间管理、租赁管理、系统管理、登录管理。
  2. 公寓房间管理:公寓管理、房间管理、标签管理、属性管理、地区杂费配套管理等等。
  3. 租赁管理:看房预约管理、租约管理。
  4. 系统管理:岗位管理、用户管理。

5. 项目分层架构

5.1. 架构

  1. 一共三层,controller层只有实现,service和dao(mapper)层都有接口和实现。看起来多。

5.2. controller

在 Spring Boot 的典型分层架构中,Controller 层负责​​接收和响应 HTTP 请求​​,其内部定义的方法则对外暴露为一个个具体的 ​​API 接口​​。
这些API接口:

  • 定位​​:它通常位于 controller包下,职责就是处理 HTTP 请求并返回响应。
  • ​​映射​​:类上的注解 @RequestMapping(“/admin/apartment”)为其中所有方法定义了一个统一的访问路径前缀(例如 http://域名/admin/apartment/xxx)。
  • ​​功能​​:类中定义的每一个方法都通过 @PostMapping, @GetMapping等注解绑定了一个具体的 URL 和 HTTP 动作,共同构成了一组crud的集合。
  • ​​前后端分离​​:在前后端分离的开发模式中,后端开发者就是通过提供这样的 Controller 来定义一套 API 接口。前端无需关心实现,只需按照接口定义(URL、请求方法、参数格式、返回格式)进行调用即可获取数据或执行操作。

6. 项目难点

6.1. 动态sql

  1. 例如,我要从mysql数据库查询数据,但查询条件可能有一个两个或多个,也可能没有条件,那sql语句该怎么写?拼接sql语句,用if做判断。

6.2. 项目优化

  1. 所有的写操作都没有事务控制,添加更新数据后,加入redis缓存时,建议存完再从库中查出来放进缓存,不要将前端提交的数据直接写入缓存,存在一致性问题。

7. 登录

7.1. 拦截器

  1. 拦截器:拦截除登录接口及静态资源外的所有接口,进行jwt验证
  2. 拦截器是Controller层的​​,专门针对到达Controller的HTTP请求进行拦截、检查和记录。​​AOP 是业务层service的,可以为任何业务方法灵活地添加日志、事务、安全等功能。

7.2. threadlocal

  1. threadlocal是线程本地变量,每个线程的独立变量副本,多个线程间不会干扰。
  2. 将拦截器解析的token保存到threadlocal中,避免重复解析token。
  3. 为什么解析的token要存储在threadlocal中而不是数据库或redis?因为springmvc处理多个请求是为每个请求分配一个线程,该请求的整个流程都在该线程中完成。threadlocal隔离开了其他请求,防止token外泄。一次请求一个线程, 一个线程一个threadlocal。

8. 全局异常处理

Logo

一座年轻的奋斗人之城,一个温馨的开发者之家。在这里,代码改变人生,开发创造未来!

更多推荐