【黑马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
相关推荐
Java水解1 小时前
常用经典 SQL 语句大全完整版–详解+实例
后端
雨中飘荡的记忆1 小时前
Spring Test详解
java·后端·spring
神奇小汤圆1 小时前
MQ生产者确认机制捕获到消息投递失败后如何重试?
后端
用户68545375977691 小时前
别再裸奔写Python了!类型注解+mypy让你代码健壮如钢铁侠
后端
用户68545375977691 小时前
为什么大厂都在升级Python 3.12?看完我连夜重构了代码
后端
Frank_zhou1 小时前
039_Netty网络编程服务端入门程序开发
后端
三姓码农张员外1 小时前
1、Elasticsearch快照迁移
后端
sin601 小时前
学习笔记:异常,泛型,集合(代码示例,企业面试题,企业实际应用场景)
后端
小安同学iter1 小时前
天机学堂day05
java·开发语言·spring boot·分布式·后端·spring cloud·微服务