【黑马JavaWeb+AI知识梳理】Web后端开发01 - 准备工作、部门管理、日志技术、多表关系、员工管理

  • 准备工作

    • 开发规范-开发模式(前后端分离开发-前端项目、后端项目、开发和部署都是分开的)

      • 具体开发流程:需求分析-接口设计(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**替换)

        java 复制代码
        private 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 ...);
        • 标量子查询
        • 列子查询
        • 行子查询
        • 表子查询
  • PageHelper:简化分页操作,提高开发效率

    • 引入依赖
    • 定义Mapper接口的查询方法(不考虑分页)
    • 在Service方法中实现分页查询
    • 实现机制:拦截普通SQL语句并改进
    • 使用细节
      • 定义的SQL语句结尾不能加分号
      • 仅能对紧跟在其后的第一个查询语句进行分页处理
  • 条件分页查询:日期时间类型参数接受时,需要通过@DateTimeFormat注解指定前端传递的日期格式

    • #{}不可出现在引号内
  • queryString查询参数接收方式

    • 如果参数少,可以controller方法中定义一个个形参接收
    • 如果参数多,可以定义一个对象接收
  • 动态SQL

    • 随着用户的输入或外部条件的变化而变化(使用场景,如搜索条件等)的SQL语句
    • : 判断条件是否成立,如果条件为true,则拼接SQL
    • : 根据查询条件,生成where关键字,自动去除条件前面多余的and或or
相关推荐
止语Lab2 小时前
好的 DX 不等于少写代码——三种语言的摩擦力设计课
后端
吃饱了得干活2 小时前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
程序员天天困2 小时前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端
Huiturn2 小时前
GPT 5.6 连续编码 10 小时,纯 Python 啃下 Word 二进制格式——doc2docx 实现拆解
后端
用户298698530142 小时前
Python 实现 Excel 与 Markdown 互转的实用指南
后端·python·excel
用户77283104908402 小时前
krono-job:零侵入、单二进制交付的分布式任务调度平台(开源)
后端
Conan在掘金2 小时前
鸿蒙报错速查:Function lacks ending return statement,返回路径漏 return 就炸,根因 + 真解法
后端
人间凡尔赛2 小时前
AI-Native 云原生架构:2026 年从容器编排到智能体编排的范式革命
后端·云原生·架构
IT_陈寒3 小时前
Vue的响应式让我加班到凌晨3点,原来问题出在这
前端·人工智能·后端
卷无止境3 小时前
提升 Python 代码健壮性的方法大盘点
后端·python