第一个项目java
·
https://www.bilibili.com/video/BV1At421K7gP
资料:https://pan.baidu.com/s/18gU7FbbHdv9vRLnPIywl2g?pwd=yyds 提取码:yyds
1. 进度
- 第29集“安装vmware”开始安装虚拟机,之前都是理论。
- 第49集配置虚拟机nat,第50集配置虚拟机静态ip。
- 第51集“准备linux虚拟机“开始安装软件,之前都是理论。
- 第57集“mybatisplus-springboot集成”第一次用idea。
- 第11集数据库设计流程。数据库设计流程:概念模型设计,逻辑模型设计,物理模型设计。
- 第13集逻辑设计-公寓信息,非常重要,数据库设计示例。一个很简单的逻辑可能设计也很复制,这个项目一共有28张表。
- 第85集开始项目开发。
- 第106集地区信息,省市区三级联动。
- 第107集上传图片。
- 第111集全局异常处理。
- 第116集分页查询。
- 第118集动态sql。
- 第124集看房预约。
- 第130集定时任务。
- 第139集登录管理。
- 第147集threadlocal。
2. 原型
- 项目开发流程:产品经理生成产品需求和产品原型;设计师设计外观和交互得到高保真原型;架构师规划整体架构,数据库设计和接口设计,输出api文档;前后端根据api文档开发;测试;部署和运维。
- 项目包括客户端和后台管理系统。客户端提供了房源模块和个人中心模块。房源模块包括房源展示和检索,个人中心包括浏览历史,看法预约,我的租约(续约)功能。后台管理系统提供了公寓管理,租赁管理,后台用户管理,客户端用户管理。
- 产品原型非常重要,数据库设计和接口设计的根据都是产品原型。
- 数据库模型最常见的是实体关系模型(entity relationship,er),将数据表示为实体和实体间的关系。每个实体都有一组属性,实体间的关系包括1:1,1:n和n:n。一对多 多的一侧加外键 多对多 用一个表连接。
3. 软件
- jdk版本为17,springboot版本为3.0.9。
- 本地windows和远程linux均安装jdk(一个开发用,一个部署用),远程linux安装mysql、redis等等,本地idea项目中配置远程的mysql等的地址,最后本地代码打包jar,放到远程linux上运行。因为java是跨平台的,所以可以在windows上开发,linux部署。
- 后期可以使用docker容器化部署。
- 前端访问主要向后端请求静态资源和后端接口,先静态资源然后请求后端接口。静态资源包括html,css文件,图片等,后端接口主要是数据(json)。静态资源的http服务器是nginx,后端接口的http服务器是springboot(tomcat)。
- mysql,innodb,数字表示。
- 增删改查crud接口,新增和修改可以合二为一。
- 测试分两个阶段,一个叫后端功能测试,一个叫对接前端
4. 内容
- 项目包括:公寓房间管理、租赁管理、系统管理、登录管理。
- 公寓房间管理:公寓管理、房间管理、标签管理、属性管理、地区杂费配套管理等等。
- 租赁管理:看房预约管理、租约管理。
- 系统管理:岗位管理、用户管理。
5. 项目分层架构
5.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
- 例如,我要从mysql数据库查询数据,但查询条件可能有一个两个或多个,也可能没有条件,那sql语句该怎么写?拼接sql语句,用if做判断。
6.2. 项目优化
- 所有的写操作都没有事务控制,添加更新数据后,加入redis缓存时,建议存完再从库中查出来放进缓存,不要将前端提交的数据直接写入缓存,存在一致性问题。
7. 登录
7.1. 拦截器
- 拦截器:拦截除登录接口及静态资源外的所有接口,进行jwt验证
- 拦截器是Controller层的,专门针对到达Controller的HTTP请求进行拦截、检查和记录。AOP 是业务层service的,可以为任何业务方法灵活地添加日志、事务、安全等功能。
7.2. threadlocal
- threadlocal是线程本地变量,每个线程的独立变量副本,多个线程间不会干扰。
- 将拦截器解析的token保存到threadlocal中,避免重复解析token。
- 为什么解析的token要存储在threadlocal中而不是数据库或redis?因为springmvc处理多个请求是为每个请求分配一个线程,该请求的整个流程都在该线程中完成。threadlocal隔离开了其他请求,防止token外泄。一次请求一个线程, 一个线程一个threadlocal。
8. 全局异常处理
更多推荐

所有评论(0)