导言

前端
HTML

CSS
JavaScript
Vue
Ajax
前端项目(未学习)
打包部署(nginx)
把前端页面放入该文件夹的HTML文件夹中(默认90端口打开该文件夹)
localhost
localhost其实是域名,一般windows系统默认将localhost指向127.0.0.1,但是localhost并不等于127.0.0.1,localhost指向的IP地址是可以配置的
127.0.0.1
首先我们要先知道一个概念,凡是以127开头的IP地址,都是回环地址(Loop back address),其所在的回环接口一般被理解为虚拟网卡,并不是真正的路由器接口。
所谓的回环地址,通俗的讲,就是我们在主机上发送给127开头的IP地址的数据包会被发送的主机自己接收,根本传不出去,外部设备也无法通过回环地址访问到本机。
小说明:正常的
数据包会从IP层进入链路层,然后发送到网络上;而给回环地址发送数据包,数据包会直接被发送主机的IP层获取,后面就没有链路层他们啥事了。
而127.0.0.1作为{127}集合中的一员,当然也是个回环地址。只不过127.0.0.1经常被默认配置为localhost的IP地址。
一般会通过ping 127.0.0.1来测试某台机器上的网络设备是否工作正常。
后端
SpringBootWeb基础
mySQL
JDBC(Mybatis底层原理)
Mybatis
JDBC(Java DataBase Connenctivity)
@springboottest

数据库连接池
- 容器,负责分配,管理数据库连接
- 资源重用
- 提升系统响应速度
- 避免数据库连接遗漏
增删改查
//删
@Delete("delete from user where id = #{id}")
public void deleteYid(Integer id);
@Test
public void testDeleteById(){
userMapper.deleteYid(5);
}
// 增
@Insert("insert into user(username, password, name,age) values (#{username},#{password},#{name},#{age})")
public void insert(User user);
@Test
public void testInsert(){
User user = new User(null,"gaoyuanyuan","666999","高圆圆",19);
userMapper.insert(user);
//改
@Update("update user set username = #{username}, password = #{password}, name = #{name}, age = #{age} where id = #{id}")
public void update(User user);
@Test
public void testUpdate(){
User user = new User(1, "duanxin","12334","段鑫",20);
userMapper.update(user);
//查
@Select("select * from user where username = #{username} and password = #{password}")
public User finByNameAndPassword(@Param("username") String username, @Param("password")String password);
//Mapper传递多个参数时,用Param注解(官方springboot骨架中,可以不用param注解)
@Test
public void tsetSlect(){
userMapper.finByNameAndPassword("duanxin","12334");
}
XML映射配置

MyBatiesX插件
SpringBoot配置文件
properties,yaml,yml
0开头的话,需要用‘ ’引起来
Web实战

开发规范Restful

特点 : ,HTTP动词描述操作
Apifox
作用 : 接口文档管理,接口请求测试,Mock服务
浏览器发起的请求的是GET方式的请求,如果需要发起POST,PUT,DELETE方式的请求,就需要借助这种工具
SpingAOP「面向接口(方面)编程」
- 减少冗余代码
- 代码无侵入
- 效率高维护方便


SpringBoot原理
配置优先级:
java文件属性>命令行参数>p>yml>yaml
但通常为yml配置文件
Bean管理
SB原理(面试高频问题)
-
起步依赖
-
自动配置(常考)
Maven高级
后端总结


项目搭建

总体架构

数据封装

前后端联调测试


删除部门
- 思路分析



添加部门


修改部门
- 查询回显
- 修改数据


RequestMapping(公共请求路径)

日志
- 一般使用LogBack(框架) : (log4j升级版),性能好
- Slf4j:简单日志门面,提供一套日志操作的标准接口和抽象类


外键约束(数据表的多表关系)
多对一
-
物理外键(不推荐) mysql 效率,集群,检查关系
-
逻辑外键
在业务逻辑中,解决外键关联
一对一
多用于单表拆分,提升操作效率
实现: 在任意一方加入外键,关联另一方的主键,并设置外键为唯一的(UNIQUE)

多对多

多表查询
原始方法查询(不要求掌握)



PageHelper(分页重点)

使用步骤
- 引入依赖
- 定义Mapper接口的查询方法(无需考虑分页)
- 在Service方法中实现分页查询(需要给pageHelper传递分页参数)
对象接受参数(gitee)
动态Sql
<mapper namespace="com.itheima.mapper.EmpMapper">
<select id="list" resultType="com.itheima.pojo.Emp">
select e.*, d.name deptName from emp e left join dept d on e.dept_id = d.id
<where>
<if test ="name != null and name!= ''">
e.name like concat('%',#{name},'%')
</if>
<if test="gender != null">
and e.gender = #{gender}
</if>
<if test="begin != null and end != null ">
and e.entry_date between #{begin} and #{end}
</if>
order by e.update_time desc
</where>
</select>
</mapper>标签
<set>标签
自动去除多余逗号:
当动态拼接多个字段时,<set> 会自动去除最后一个字段后的多余逗号(这是最常见的用途)
新增员工信息
基本信息
- 架构

动态sql(forEach)

@Option:主键返回

事务
要么同时成功要么同时失败
spring事务管理


四大特性
文件上传


阿里云OSS对象存储服务

- Bucket:存储对象的容器

注入属性两种方式


删除(修改)员工


异常处理

员工信息统计

员工登陆(校验)



Cookie
- cookie优点:HTTP协议中支持的技术
- cookie缺点: 移动端app无法使用cookie 不安全,用户可以自己删除 不能跨域
- 原理: 响应头Set-Cookie 请求头Cookie
Session

Session的底层是根据Cookie的(set-cookie,cookie)
令牌
JWT令牌

public class JWTTest {
@Test
public void testGenerateJwt(){
Map<String,Object> dataMap = new HashMap<>();
dataMap.put("id",1);
dataMap.put("username","admin");
String jwt = Jwts.builder().signWith(SignatureAlgorithm.HS256, "aXRoZWltYQ==")//指定家,i算法
.addClaims(dataMap)//添加自定义集合
.setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000))//设置过期时间
.compact();//生成令牌
System.out.println(jwt);
}
@Test
public void testParseJWT(){
String token = "eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsImV4cCI6MTc1MDY4NjMxOH0.XfiZ6jPXIeWfmAAx04fxyHE59-PNflE3OFumCpm6-Ec";
Claims claims = Jwts.parser().setSigningKey("aXRoZWltYQ==")
.parseClaimsJws(token)
.getBody();
System.out.println(claims);
}
}
Filter


package com.itheima.filter;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
@Slf4j
@WebFilter(urlPatterns = "/*")
public class DemoFilter implements Filter {
//初始化方法
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("初始化...");
}
//拦截请求后,执行多次
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
log.info("拦截请求...");
//放行
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
log.info("销毁...");
}
}令牌校验Filter


拦截器Intercepter


顺序可用order设置
Linux
Docker
