-
准备工作
-
开发规范-开发模式(前后端分离开发-前端项目、后端项目、开发和部署都是分开的)
- 具体开发流程:需求分析-接口设计(API接口文档)-前后端并行开发(遵守规范)-测试(前端、后端)-前后端联调测试。
-
开发规范-Restful(REpresentational State Transfer)风格,表述性状态转换,一种软件架构风格。
- GET: 查询
- POST: 新增
- PUT: 修改
- DELETE: 删除
-
工程搭建
-
创建SpringBoot工程,引入web开发起步依赖、mybatis、mysql驱动、lombok
-
创建数据库表dept,再application.yml中配置数据库的基本信息
-
准备基础代码结构,并引入实体类Dept及统一的响应结果封装类Result
json{ "code": 1, "msg": "操作成功", "data": ... }java@Data public class Result{ private Integer code; private String msg; private Object data; } -
思路分析
- 前端-Controller
- Controller
- 接受请求
- 调用Service层
- 响应结果
- Service
- 调用Mapper接口方法
- Mapper
- SQL:select * from dept order by update_time desc;
- Mapper-数据库
-
实体类属性名 和数据库表查询返回的字段名一致,mybatis会自动封装,反之则不会:yml文件开启驼峰命名映射(要求:xxx_abc -> xxxAbc)
-
Nginx的反向代理:一种网络架构技术,通过反向代理服务器为后端服务器做代理:安全、灵活、负载均衡
location ^~ /api/ { rewrite ~ /api/(.*)$ /$1 break; proxy_pass http://localhost:8080; } -
传参:前端传递的请求参数名与服务器端参数名一致,可以省略@RequestParam
java//一旦声明@RequestParam注解,参数名必须和请求参数名一致,该参数在请求时必须携带,否则报错,如果可以不传递,则使用@RequestParam(value = "id",required = false) @DeleteMapping("/depts") public Result delete(Integer id){ System.out.println("删除部门:" + id); return Result.success(); } -
路径参数:@PathVariable
-
多个路径参数:
java@GetMapping("depts/{id}/{sta}") public Result getInfo(@PathVariable Integer id, @PathVariable Integer sta){ } -
@RequestMapping注解可以加在
- 类上(可选)
- 方法上
- 一个完整的请求路径=类上+方法上
-
-
-
日志技术
-
JUL:官方的,不好用
-
log4j:一个流行的日志框架,提供了灵活的配置选项,支持多种输出目标。
-
logback:基于Log4j升级而来,提供了更多的功能和配置选项,性能优于Log4j
-
Logback快速入门
- 准备工作:引入logback的依赖(springboot项目中该依赖已传递,不用额外配置)、配置文件logback.xml
- 记录日志:定义日志记录对象Logger,记录日志
-
Logback配置文件详解(由于固定,所以可以用**@slf4j**替换)
javaprivate static final logger log = LoggerFactory.getLogger(LogTest.class);- logback.xml
-
Logback日志级别(可单独配置,指定级别及以上的日志才会输出)
- trace:追踪,记录程序运行轨迹【使用很少,其他的均使用较多】
- debug:调试:记录程序调试过程中的信息,实际应用中一般将其视为最低级别
- info:记录一般信息,描述程序运行的关键事件,如网络、IO
- warn:警告:记录潜在有害的情况
- error:错误
-
-
Slf4j(Simple Logging Facade for Java): 简单日志门面,提供了一套日志操作的标准接口及抽象类,允许应用程序使用不同的底层日志框架。
-
-
多表关系
- 项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构。由于业务之间相互关联,所以各个表结构之间也存在着各种联系。
- 一对多(多对一)
- 场景:部门与员工(一个部门(1)下有多个员工(n))
- 在多的一方添加字段,来关联一的一方的主键。
- 物理外键:
- 概念:使用foreign key 定义外键关联另一张表
- 缺点:
- 影响增删改的效率(需要检查外键关系)
- 仅用于单节点数据库,不适用于分布式、集群场景
- 容易引发数据库死锁问题,消耗性能
- 逻辑外键:
- 概念:在业务层逻辑中,解决外键关联
- 通过逻辑外键可以很方便地解决上述物理外键中的问题
- 一对一
- 特殊的一对多。在任意一方添加不可重复的外键即可
- 多对多
- 需要有个中间表,中间表的两个外键分别对应另外两张表的主键
-
多表查询:指从多张表中查询数据
- 笛卡尔积:在数学中,两个集合的所有组合情况
- 连接查询
- 内连接:A、B交集部分数据
- 隐式:where
- 显式:[inner] join on
- 给表起别名简化书写
- 外连接(左外连接用的更多,但如果掉个儿,可以和右外连接平替)
- 左外连接:查询左表所有数据(包括两张表交集部分数据)
- 右外连接:查询右表所有数据(包括两张表交集部分数据)
- 子查询:SQL语句中嵌套select语句,称为嵌套查询,又称子查询。
- select * from t1 where column1 = (select column1 from t2 ...);
- 标量子查询
- 列子查询
- 行子查询
- 表子查询
- 内连接:A、B交集部分数据
-
PageHelper:简化分页操作,提高开发效率
- 引入依赖
- 定义Mapper接口的查询方法(不考虑分页)
- 在Service方法中实现分页查询
- 实现机制:拦截普通SQL语句并改进
- 使用细节
- 定义的SQL语句结尾不能加分号
- 仅能对紧跟在其后的第一个查询语句进行分页处理
-
条件分页查询:日期时间类型参数接受时,需要通过@DateTimeFormat注解指定前端传递的日期格式
- #{}不可出现在引号内
-
queryString查询参数接收方式
- 如果参数少,可以controller方法中定义一个个形参接收
- 如果参数多,可以定义一个对象接收
-
动态SQL
- 随着用户的输入或外部条件的变化而变化(使用场景,如搜索条件等)的SQL语句
- : 判断条件是否成立,如果条件为true,则拼接SQL
- : 根据查询条件,生成where关键字,自动去除条件前面多余的and或or
【黑马JavaWeb+AI知识梳理】Web后端开发01 - 准备工作、部门管理、日志技术、多表关系、员工管理
不思念一个荒废的名字2025-12-08 14:10
相关推荐
Java水解1 小时前
常用经典 SQL 语句大全完整版–详解+实例雨中飘荡的记忆1 小时前
Spring Test详解神奇小汤圆1 小时前
MQ生产者确认机制捕获到消息投递失败后如何重试?用户68545375977691 小时前
别再裸奔写Python了!类型注解+mypy让你代码健壮如钢铁侠用户68545375977691 小时前
为什么大厂都在升级Python 3.12?看完我连夜重构了代码Frank_zhou1 小时前
039_Netty网络编程服务端入门程序开发三姓码农张员外1 小时前
1、Elasticsearch快照迁移sin601 小时前
学习笔记:异常,泛型,集合(代码示例,企业面试题,企业实际应用场景)小安同学iter1 小时前
天机学堂day05