MySQL数据库
数据库数据库:DataBase(DB),是存储和管理数据的仓库
数据库管理系统:DataBase Management System(DBMS),操纵和管理数据库的大型软件
SQL:Structured Query Language,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准
MySQL安装参考即可05-Web后端基础(数据库) - 飞书云文档
MySQL数据模型
关系型数据库:建立在关系模型基础上,由多张相互连接的二维表组成的数据库
特点:
使用表存储数据,格式统一,便于维护
使用SQL语言操作,标准统一,使用方便,可用于复杂查询
创建数据库命令:
1create database xxxx;
SQL语句
SQL:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准
分类:
分类
全称
说明
DDL
Data Definition Language
数据定义语言,用来定义数据库对象(数据库,表,字段)
DML
Data Manipulation[məˌnɪpjʊˈleɪʃən] Language
数据操作语言,用来对数据库 ...
Java 多线程
进程和线程
进程(Process)是计算机中的程序关于某数据集合上的一次运动活动
是系统进行资源分配的基本单位
简单理解:程序的执行过程
独立性:每一个进程都有自己的空间,在没有经过进程本身允许的情况下,一个进程不可以直接访问其他的进程空间
动态性:进程是动态产生的,动态消亡的
并发性:任何进程都可以同其他进程一起并发执行
并行和并发
并行:在同一时刻,有多个指令在CPU上**同时**执行
并发:在同一时刻,有多个指令在CPU上交替执行
多进程同时工作对于一个CPU而言,它是在多个线程间轮换执行的
线程线程(Thread):进程可以同时执行多个任务,每个任务就是线程
多线程的意义
随着处理器上的核心数量越来越多,现在大多数计算机都比以往更加擅长并行计算
一个线程,在一个时刻,只能运行在一个处理器核心上
提高执行效率
同时处理多个任务
Java开启线程方式
Java默认是多线程,当运行时默认会存在main线程和垃圾回收线程
开启线程,有以下三种方式:
继承Thread类
实现Runnable接口
实现Callable接口
继承Thread类步骤如下:
编写一个类 ...
SpringBoot使用总结
SSM
SSM就是指的:SpringMVC、SpringFramework、MyBatis
SpringMVC原文地址:什么是Spring MVC
什么是MVCMVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范
ModelModel(模型):数据模型,提供要展示的数据,因此包含数据(java bean)和行为(service层),可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao) 和 服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务
ViewView(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
ControllerController(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。也就是说控制器做了个调度员的工作。
最典型的MVC就是JSP + servlet + javabean的模式。
Spring 常用注解总 ...
SpringBoot快速搭建
SpringBoot快速搭建创建一个基础的SpringBoot项目如下所示:
如果是第一次创建SpringBoot项目,需要等待一会,右下角会提示下载的信息(也有可能会先让你选择JDK版本,然后才会下载)。当下载完成,可以发现 /src/main/java/包名下的xxxApplication图标发生变化了,如果可以执行这个文件就说明配置成功了
查看当前项目的pom.xml文件,关注引入的依赖:
123456789101112<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId ...
SpringBoot底层剖析
SpringBoot原理配置优先级
SpringBoot中支持三种格式的配置文件:
12345678910// application.propertiesserver.port = 8081// application.yamlserver: port: 8082// application.ymlserver: port: 8083
如果同时存在以上三份配置文件,那么配置生效的优先级为:properties > yml > yaml
不过,开发中尽量统一配置文件的格式,只使用同一种格式的配置文件
SpringBoot除了支持文件属性配置,还支持Java系统属性和命令行参数的方式进行属性配置
Java系统属性:-Dserver.port=9000
命令行参数:--server.port=10010
命令行参数优先级大于Java系统属性,且它们都优先于配置文件
通过Maven打包后的Jar包,使用Java -Dserver.port=9000 -jar tlias-web-management-0.0.1-SNAPSHOT.jar --server.por ...
ThreadLocal
ThreadLocal
ThreadLocal并不是一个Thread,而是Thread的局部变量(哪个线程存的值,只能由哪个线程取)
ThreadLocal为每个线程提供一份单独的存储空间,具有线程隔离效果,不同的线程之间不会相互干扰
ThreadLocal常用方法:
public void set(T value):设置当前线程的线程局部变量
public T get():返回当前线程所对应的线程局部变量的值
public void remove():移除当前线程的线程局部变量
示例:
123456789101112131415161718public class ThreadLocalTest { private static ThreadLocal<String> local = new ThreadLocal<>(); public static void main(String[] args) { local.set("Main Message"); // 创建线程 ...
SpringBoot用户登录与校验功能
登录功能和登录校验登录功能实质上就是获取前端发送过来的登录信息,与后端中的用户信息进行比较,这个功能只会在登录界面时生效
而登录校验则表示想要进行其他功能的操作时,先要明确当前用户的身份(防止用户跳过登录界面直接进入系统)
登录校验的实现相比登录功能来说更加复杂且多样,登录功能只需要在传统的三层架构中编写查询数据即可
所以主要学习的是登录校验
登录校验思路
登录标记:用户登录成功之后,在后续的每一次请求中,都可以获取到该标记【会话技术】
统一拦截:过滤器Filter、拦截器Interceptor
会话技术
会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应
会话建立或断开的概念:
会话是逻辑概念,不是物理连接
会话建立是通过标记进行约束的而建立的,断开就表示标记失效、不存在或非法修改
会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自同一浏览器,以便在同一次会话的多次请求间共享数据
会话跟踪方案:
客户端会话跟踪技术:Cookie
服务端会话跟踪技术:Session
令牌技术
Cooki ...
SpringBoot异常处理
异常处理
全局异常处理器
123456789@Slf4j@RestControllerAdvicepublic class GlobalExceptionHandler { @ExceptionHandler public Result handleException(Exception e) { log.error("全局异常处理器,拦截到异常", e); return Result.error("对不起,服务器异常,请稍后再试"); }}
定义全局异常处理器类,需要在类上加上@RestControllerAdvice (@ControllerAdvice + @ResponseBody)
对于异常处理的方法,加上@ExceptionHandler
利用OSS实现文件上传
文件上传
文件上传:是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程
文件上传在项目中应用非常广泛,微博、微信朋友圈都用到了文件上传功能
前端要求:
12345<form action="/upload" method="post" enctype="multipart/form-data"> 姓名:<input type="text" name="name"> <br> 年龄:<input type="text" name="age"> <br> 图像:<input type="file" name="file"> <br></form>
请求方式必须为Post,enctype必须为multipart/form-data,还需要表单项<input type="file ...
日志技术
日志技术在没有接触到日志技术前,获取程序运行时的数据或状态,只能依靠System.out.println()这种方式,而这种方式的缺点很明显:
只能在控制台中输出,如果控制台的信息过多,找到想要的输出结果不方便
不便于扩展、维护,如果到了项目后期,不想要再输出信息,还需要手动去注释或删除代码
日志技术:用于记录应用程序的运行信息、状态信息、错误信息等等
日志技术的优势在于:
更方便的进行数据追踪
性能相比传统方式更好
可以通过输出日志文件,减少控制台信息
日志存在级别概念,可以通过控制日志级别而有目的的筛选信息
Java提供了官方的日志技术:JUL(java.util.logging)。配置相对简单,但不够灵活,性能较差,所以使用较少
目前流行的日志技术有
Log4j:提供了灵活的配置选项,支持多种输出目标。不过由于Logback的出现,现在使用的人数也在逐渐减少
Logback:基于Log4j升级而来,提供了更多的功能和配置选项,性能优于Log4j
Slf4j(Simple Logging Facade For Java):简单日志面门,提供了一套日志操作的标准接口及抽象类 ...
