Java+WebAI黑马知识点

HTTP协议

概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器与服务器之间数据传输的规则。

特点:

1.基于TCP协议:面向连接,安全

2.基于请求-响应模型:一次请求对应一次响应

3.HTTP协议是无状态的协议:对于事务处理没有记忆能力,每次请求-响应都是独立的。

优点:速度快 缺点:多次请求间不能共享数据


请求协议

请求数据格式

请求方式--get:请求参数在请求行中,没有请求体。get请求大小在浏览器中是有限制的

请求方式--post:请求参数在请求体中,post请求大小是没有限制的。

请求行:请求数据第一行(请求方式、资源路径、协议)

请求头:第二行开始,格式key-value

请求体:post请求,存放请求参数

请求数据获取

http请求数据不需要程序员自己解析,web服务器负责对http请求数据进行解析,并封装为了请求对象。

如何获取请求数据?

httpservletrequest对象里面封装了所有的请求信息。

响应数据格式

响应行:响应数据第一行(协议、状态码、描述)

响应头:第二行开始,格式key:value

响应体:最后一部分,存放响应数据


耦合:衡量软件中各个层/各个模块的依赖关联程度

内聚:软件中各个功能模块内部的功能联系

高内聚低耦合

控制反转:IOC(Inversion Of Control),对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转

依赖注入:DI(Dependency Injection)。容器为应用程序提供运行时,所依赖的资源称之为依赖注入

Bean对象:ioc容器中创建、管理的对象称之为Bean

要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一:

@Component:声明bean的基础注解

@Controller:@Component的衍生注解,标注在控制层类上

@Service:@Component的衍生注解,标注在业务层类上

@Repository:@Component的衍生注解,标注在数据访问层类上(由于与mybatis整合,用的少)

在springboot集成web开发中,声明控制器bean只能用@Controller。声明bean的注解想要生效,需要被扫描到,启动类默认扫描当前包及其子包。

基于@Autowired进行依赖注入的常见方式有三种:

1.属性注入(多) 优点:代码简洁、方便快速开发 缺点:隐藏了类之间的依赖关系、可能会破坏类的封装性

复制代码
@RestController
public class UserController{
    @Autowired
    private UserService userService;
    ...
}

2.构造函数注入 优点:能清晰地看到类的依赖关系、提高了代码安全性 缺点:代码繁琐、若构造参数过多会导致构造函数臃肿

java 复制代码
public class UserController{
    private final UserService userService;
    @Autowired
    public UserController(UserService userService){
    this.userService=userService;}
    ...
}

3..setter注入 优点:保持了类的封装性、依赖关系更清晰 缺点:需要额外编写setter方法,增加了代码量

java 复制代码
@RestController
public class UserController{
    private final UserService userService;
    @Autowired
    public void UserService(UserService userService){
    this.userService=userService;}
    ...
}

@Autowired注解,默认是按照类型进行注入。

如果存在多个相同类型的bean,会报错。

解决方法:1.@Primary 2.@Qualifier 3.@Resource

@Resource和@Autowired区别:@Autowired是spring框架提供的注解,而@Resource是javaee规范提供的;@Autowired默认是按照类型注入,而@Resource默认是按照名称注入


JDBC(Java DatBase Connectivity):使用java语言操作关系型数据库的一套API。

MyBatis是一款优秀的持久层框架,由于简化JDBC的开发

数据库连接池是个容器,负责分配、管理数据库连接。它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。释放空闲时间超过最大时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏。优势:资源重用、提升系统响应速度、避免数据库连接遗漏。标准接口:DataSource,功能获取连接。(Druid、Hikari默认)

|-----|-------------------------------|---------------|---------|
| 符号 | 说明 | 场景 | 优缺点 |
| #{} | 占位符。执行时,会将#{...}替换为?,生成预编译sql | 参数值传递 | 安全、性能高 |
| ${} | 拼接符。直接将参数拼接在sql语句中,存在sql注入问题。 | 表名、字段名动态设置时使用 | 不安全、性能低 |

在mybatis中既可以通过注解配置sql语句也可以通过xml配置文件配置sql语句。

默认规则:

1.xml映射文件的名称与mapper接口名称一致,并且将xml映射文件和mapper接口放置在相同包下。

2.xml映射文件的namespace属性为mapper接口全限定名一致

3.xml映射文件中sql语句的id与mapper接口中的方法名一致,并且保持返回类型一致

yml配置文件

格式:数值前边必须有空格,作为分隔符;使用缩进表示层级关系,缩进时不允许使用tab键,只能用空格;缩进的空格数目不重要,只要相同层级的元素左侧对齐即可;#表示注释

Restful

Rest(REpresentational State Transfer),表述性状态转换,它是一种软件架构风格。

Rest风格特点:URL定义资源、HTTP动词描述操作


项目解析

代码执行顺序是:

复制代码
浏览器/前端
   ↓
DeptController
   ↓
DeptService
   ↓
DeptServiceImpl
   ↓
DeptMapper
   ↓
数据库 dept 表
   ↓
返回部门列表
   ↓
Result.success(...)
   ↓
返回给前端

1. Controller:接收请求

复制代码
@RestController
public class DeptController {

    @Autowired
    private DeptService deptService;

    @GetMapping("/depts")                   //->当前端发送 GET 请求访问 /depts 时,就会执行下面的 findAll() 方法。
    public Result findAll() {
        List<Dept> deptList = deptService.findAll();               //->Controller 自己不去查数据库,而是调用 Service,让 Service 去处理查询部门这件事。
        return Result.success(deptList);              //->把查出来的部门列表包装成统一格式,然后返回给前端。
    }
}

作用是:接收前端请求,并返回响应结果。

2. Service:业务处理

作用是:处理业务逻辑。

复制代码
@Service
public class DeptServiceImpl implements DeptService {

    @Autowired
    private DeptMapper deptMapper;

    @Override
    public List<Dept> findAll() {
        return deptMapper.findAll();
    }
}

3. Mapper:操作数据库

复制代码
@Mapper
public interface DeptMapper {

    /**
     * 查询全部部门
     */
    @Select("select * from dept order by update_time desc")
    public List<Dept> findAll();
}

作用是:真正去数据库查询数据。

4. 三个 findAll() 是什么关系?

用户访问 /depts,Controller 接住请求,Controller 调用 Service,Service 调用 Mapper,Mapper 执行 SQL 查 dept 表,查到的数据返回给 Service,再返回给 Controller,最后 Controller 用 Result.success() 包装后返回给前端。

相关推荐
米码收割机2 小时前
【项目】spring boot+vue3 宠物领养系统(源码+文档)【独一无二】
java·spring boot·宠物
刹那芳华19923 小时前
STMF+ESP-S+MQTT协议连接华为云端(附踩坑记录)
java·struts·华为
就改了8 小时前
Java8 日期处理(详细版)
java·python·算法
麻瓜生活睁不开眼9 小时前
Android16定制SearchLauncher新增投屏Cast桌面快捷图标完整实现
java·launcher·aosp16
IT小盘10 小时前
12-Prompt不等于一句话-System-User-Context三层结构
java·windows·prompt
都叫我大帅哥11 小时前
Spring Data JPA 查询之道:方法命名与示例查询完全指南
java·后端·spring
重庆小透明13 小时前
带你从不同视角了解三大MQ
java·学习·spring·kafka·rabbitmq·rocketmq
冰心孤城13 小时前
C++ 与 C#混合编程 示例 (基于VS)
java·c++·c#
风中芦苇啊15 小时前
Java EasyExcel 导入通用工具类:自定义注解映射字段 + 反射机制
java·开发语言