数据库和SpringBoot

数据库

学习数据库主要学习的是如何对数据进行增删改查操作.

SQL

Structured Query Language: 结构化查询语言, 通过此语言让程序员和数据库软件进行交流

DBMS

DataBaseManagementSystem: 数据库管理系统(数据库软件)

常见的几种DBMS:

  1. MySQL: Oracle公司产品, 08年被Sun公司收购, 09年Sun公司被Oracle收购. 开源产品 , MaraDB实际上就是MySQL的一个分支使用方式和MySQL一样. 市占率排名第一
  2. Oracle: Oracle公司产品, 闭源产品 ,性能最强 价格最贵, 市占率排名第二
  3. SQLServer: 微软公司产品, 闭源产品 , 市占率第三
  4. DB2: IBM公司产品
  5. SQLite: 轻量级数据库, 安装包几十K ,只具备最基础的增删改查功能.

如何连接数据库执行SQL语句

执行SQL语句需要先和数据库软件建立链接之后
. 从开始菜单中找到MariaDB或MySQL,然后打开找到里面的MySQL Client 打开 , 然后输入密码后回车
退出指令: exit
登录指令: mysql -uroot -p

数据库和表的概念

在MySQL数据库软件中保存数据,需要先建库,然后在库里面建表,然后把数据保存到表中
在这里插入图片描述

SQL语句格式:

  1. 以;号结尾
  2. 关键字不区分大小写
  3. 可以有空格或换行但一定要以;结尾

数据库相关的SQL语句

  1. 查询所有数据库
    格式: show databases;
  2. 创建数据库
    格式: create database 数据库名 charset=utf8/gbk;
  3. 查看数据库信息
    格式: show create database 数据库名;
  4. 删除数据库
    格式: drop database 数据库名;
  5. 使用数据库
    格式: drop database 数据库名;
    格式: use 数据库名;

表相关的SQL语句

执行表相关的SQL语句必须已经使用了某个数据库
1.创建表
格式: create table 表名(字段1名 类型,字段2名 类型,…);
2.查询所有表
格式: show tables;
3.查询表信息
格式: show create table 表名;
4.查询表字段
格式: desc 表名;
5.修改表名
格式: rename table 原名 to 新名;
6.删除表
格式: drop table 表名;
7.添加表字段
最后面添加格式: alter table 表名 add 字段名 类型;
最前面添加格式: alter table 表名 add 字段名 类型 first;
在xxx字段后面添加: alter table 表名 add 字段名 类型 after xxx;
8.删除表字段
格式: alter table 表名 drop 字段名;
9.修改表字段
格式: alter table 表名 change 原名 新名 新类型;
10.给字段加密(MD5)
格式:update table set 字段名=MD5(字段名) where id =1;
注意:如果不加where条件就是把原有所有的字段加密。
还有一种是插入时加密:insert into table values(2,’xxx’,MD5(‘123456’))
如何校验:将用户传递进来的密码,进行md5加密,然后比对加密后的值。
select * from table where name=xiaoming and pwd=MD5(‘123456’)
11.根据身份证号码统计年龄区间,有则显示,无则0补位
SELECT
SUM(CASE WHEN YEAR (now()) - YEAR (substring( 身份证号码字段, 7, 8 )) > 0 AND YEAR (now()) - YEAR (substring( 身份证号码字段, 7, 8 )) <= 35 THEN 1 ELSE 0 END) AS ‘35岁以下’,
SUM(CASE WHEN YEAR (now()) - YEAR (substring( 身份证号码字段, 7, 8 )) >= 36 AND YEAR (now()) - YEAR (substring( 身份证号码字段, 7, 8 )) <= 45 THEN 1 ELSE 0 END) AS ‘36~45岁’,
SUM(CASE WHEN YEAR (now()) - YEAR (substring( 身份证号码字段, 7, 8 )) >= 46 AND YEAR (now()) - YEAR (substring( 身份证号码字段, 7, 8 )) <= 55 THEN 1 ELSE 0 END) AS ‘46~55岁’,
SUM(CASE WHEN YEAR (now()) - YEAR (substring( 身份证号码字段, 7, 8 )) > 55 THEN 1 ELSE 0 END) AS ‘55岁以上’
FROM
表名
12.清空表数据
truncate table 表名;

UTF8字符集

目前utf8 和utf8mb3 一样 ,代表的是 用3个字节表示一个字符 (mb3=most byte 3)
utf8mb4 最多不超过4个字节表示一个字符

数据相关SQL

1.往表中插入数据
全表插入格式: insert into 表名 values(值1,值2);
指定字段插入格式: insert into 表名(字段1名,字段2名)values(值1,值2);
2.查询数据
格式: select 字段信息 from 表名 where 条件;
3.修改数据
格式: update 表名 set 字段名=值 where 条件;
4.删除数据
格式: delete from 表名 where 条件;
5.删除数据库表的所有数据
使用 delete from 表名,会生成日志,序号 id 会延续之前的编号继续编号。
使用 truncate table 表名,无日志生成,序号 id 重新开始从1编号。

主键约束

主键: 表示数据唯一性的字段称为主键
约束: 创建表时给表字段添加的限制条件
主键约束: 限制主键的值 唯一且非空
如:create table t1 (id int primary key,name varchar(50))charset=utf8;

主键约束+自增

自增规则: 从历史最大值基础上+1
如: create table t2(id int primary key auto_increment,name varchar(50))charset=utf8;

SQL语句分类

DDL: 数据定义语言,包括数据库相关和表相关的SQL语句
DML: 数据操作语言, 包括增删改查
DQL: 数据查询语言, 只包含select查询相关的SQL语句
TCL: 事务控制语言
DCL: 数据控制语言

数据类型

1.整数: int(m)和bigint(m) m代表显示长度, m=5 存18 查询得到00018
create table t3(age int(5) zerofill);
insert into t3 values(18);
select * from t3;
2.浮点数: double(m,d) m代表总长度,d代表小数长度 , 存23.212 m=5 d=3
create table t5(price double(5,3));
insert into t5 values(23.32123);
insert into t5 values(233.32123); //报错
3.字符串:
char(m), 固定长度, m=10 存abc 占10, 执行效率略高, 当保存数据的长度相对固定时使用, 最大值255
varchar(m),可变长度,m=10 存abc 占3,更节省空间, 最大值65535 但推荐保存短的数据(255以内)
text(m),可变长度, 最大值65535,建议保存长度大于255的
4.日期:
date, 只能保存年月日
time, 只能保存时分秒
datetime, 保存年月日时分秒, 默认值为null , 最大值 9999-12-31
timestamp(时间戳,距离1970年1月1日的毫秒数),保存年月日时分秒,默认值为当前系统时间,最大值 2038-1-19
如:
create table t6(t1 date,t2 time,t3 datetime,t4 timestamp);
insert into t6 values(“2022-5-15”,null,null,null);
insert into t6 values(null,“14:20:25”,“2011-10-22 10:20:30”,null);
大部分MySQL数据库软件timestamp字段的默认效果是当表中任何一个字段的值发生改变时timestamp字段会自动变为当前的系统时间
关闭自动更新
alter table product change created created timestamp not null default current_timestamp;
打开自动更新
alter table product change created created timestamp not null default current_timestamp on update current_timestamp;

导入*.sql批处理文件

在客户端中 执行 source 硬盘位置:/文件名.sql;

去重distinct

查询员工表中所有不同的工作
select distinct job from emp;
查询员工表中出现了哪几个不同的部门id?
select distinct dept_id from emp;

is null和is not null

查询有领导的员工姓名和领导id
select name,manager from emp where manager is not null;
查询没有领导的员工姓名
select name from emp where manager is null;

比较运算符 > < >= <= = !=和<>

查询工资大于等于3000的员工信息
select * from emp where sal>=3000;
查询工作不是程序员的员工信息(两种写法)
select * from emp where job!=“程序员”;
select * from emp where job<>“程序员”;

and 和 or

查询1号部门工资高于2000的员工信息
select * from emp where dept_id=1 and sal>2000;
查询3号部门或工资等于5000的员工信息
select * from emp where dept_id=3 or sal=5000;
查询出孙悟空和猪八戒的员工信息
select * from emp where name=“孙悟空” or name=“猪八戒”;

between x and y 两者之间

查询工资在2000到3000之间的员工信息
select * from emp where sal>=2000 and sal<=3000;
select * from emp where sal between 2000 and 3000;
select * from emp where sal not between 2000 and 3000;

in关键字

查询工资等于5000,1500,3000的员工信息
select * from emp where sal=5000 or sal=1500 or sal=3000;
select * from emp where sal in(5000,1500,3000);
select * from emp where sal not in(5000,1500,3000);

模糊查询like

%: 代表0或多个未知字符
_:代表1个未知字符
举例:
以x开头 x%
以x结尾 %x
包含x %x%
第二个字符是x x%
以x开头以y结尾 x%y
第二个是x倒数第三个是y x%y

排序order by

格式: order by 字段名 asc(升序默认)/desc(降序)

分页查询

格式: limit 跳过的条数,请求的条数(每页的条数)
跳过的条数=(请求的页数-1)*请求的条数(每页条数)
举例:
查询第1页的5条数据(1-5条) limit 0, 5
查询第2页的5条数据(6-10条) limit 5, 5
请求第1页的10条数据 limit 0,10
请求第3页的10条数据 limit 20,10
请求第8页的10条数据 limit 70,10
请求第6页的8条数数据 limit 40,8

别名

select name as “姓名” from emp ;
select name “姓名” from emp ;
select name 姓名 from emp ;

聚合函数

通过聚合函数可以对查询的多条数据进行统计查询,统计查询的方式包括:求平均值, 求最大值,求最小值,求和,计数
平均值avg(字段名)
查询1号部门的平均工资
select avg(sal) from emp where dept_id=1;
查询销售的平均工资
select avg(sal) from emp where job=“销售”;
最大值max(字段名)
查询程序员的最高工资
select max(sal) from emp where job=“程序员”;
最小值min(字段名)
查询3号部门的最低工资
select min(sal) from emp where dept_id=3;
求和sum(字段名)
查询2号部门的工资总和
select sum(sal) from emp where dept_id=2;
计数count()
查询程序员的数量
select count(
) from emp where job=“程序员”;

数值计算 + - * / %

查询每个员工的姓名,工资和年终奖(年终奖=5个月的工资)
select name,sal,sal*5 年终奖 from emp;
给3号部门的员工每人涨薪5块钱
update emp set sal=sal+5 where dept_id=3;

分组查询 group by

格式: group by 分组的字段名
查询每个部门的平均工资
select dept_id,avg(sal) from emp group by dept_id;
查询每个部门的最高工资
select dept_id,max(sal) from emp group by dept_id;
查询每种工作的最高工资
select job,max(sal) from emp group by job;
查询每种工作的人数
select job,count() from emp group by job;
查询每个部门工资高于2000的人数
select dept_id,count(
) from emp where sal>2000 group by dept_id;
查询每个部门有领导的员工的人数
select dept_id,count(*) from emp where manager is not null group by dept_id;

having

where后面只能写普通字段的条件,不能包含聚合函数
having后面可以包含聚合函数的条件,需要和group by结合使用,写在group by的后面
查询每个部门的平均工资要求平均工资高于2000
select dept_id,avg(sal) from emp group by dept_id having avg(sal)>2000;
查询每种工作的人数,只查询人数大于1 的
select job,count() from emp group by job having count()>1;
select job,count(*) c from emp group by job having c>1;
查询每个部门的工资总和,只查询有领导的员工, 并且要求工资总和大于5400
select dept_id,sum(sal) s from emp where manager is not null group by dept_id having s>5400;
4. 查询每个部门的平均工资, 只查询工资在1000到3000之间的,并且过滤掉平均工资低于2000的
select dept_id,avg(sal) a from emp where sal between 1000 and 3000 group by dept_id having a>=2000;

各个关键字的书写顺序

select 查询的字段信息 from 表名 where 普通字段条件 group by 分组字段名 having 聚合函数条件 order by 排序字段名 limit 跳过条数,请求条数;

子查询(嵌套查询)

查询工资大于2号部门平均工资的员工信息
select avg(sal) from emp where dept_id=2;
select * from emp where sal>(select avg(sal) from emp where dept_id=2);
查询工资高于程序员最高工资的员工信息
select max(sal) from emp where job=“程序员”;
select * from emp where sal>(select max(sal) from emp where job=“程序员”);
查询工资最高的员工信息
select max(sal) from emp;
select * from emp where sal=(select max(sal) from emp);
查询和孙悟空相同工作的员工信息
select job from emp where name=“孙悟空”;
select * from emp where job=(select job from emp where name=“孙悟空”) and name!=“孙悟空”;
查询拿最低工资员工的同事们的信息(同事指同一部门)
select min(sal) from emp;
select dept_id from emp where sal=(select min(sal) from emp);

select * from emp where dept_id=(select dept_id from emp where sal=(select min(sal) from emp)) and sal!=(select min(sal) from emp);

关联关系

指创建的表和表之间存在的业务关系
有哪几种关系?
一对一: 有AB两张表,A表中的一条数据对应B表中的一条数据, 同时B表中的一条数据也对应A表中的一条数据
在这里插入图片描述
一对多:有AB两张表,A表中的一条数据对应B表中的多条数据, 同时B表中的一条数据对应A表中的一条数据
在这里插入图片描述
多对多:有AB两张表,A表中的一条数据对应B表中的多条数据, 同时B表中的一条数据也对应A表中的多条数据
在这里插入图片描述
表和表之间如何建立关系 ,通过外键字段建立关系
一对一: 在任意表中添加一个建立关系的字段指向另外一张表的主键 .
一对多: 在多的表中添加建立关系的字段(外键) 指向另外一张表的主键 .
多对多: 需要创建一个单独的关系表,里面至少包含两个字段分别指向另外两个表的主键.

关联查询

关联查询之等值链接

格式: select * from A,B where 关联关系
查询工资高于2000的员工姓名和对应的部门名
select e.name,d.name,sal
from emp e,dept d where e.dept_id=d.id and sal>2000;

关联查询之内连接

格式: select * from A join B on 关联关系
查询工资高于2000的员工姓名和对应的部门名
select e.name,d.name,sal from emp e join dept d on e.dept_id=d.id where sal>2000;

关联查询之外连接

等值链接和内连接查询到的都是两张表的交集数据
外连接查询的是一张表的全部和另外一张表的交集数据
格式: select * from A left/right join B on 关联关系
insert into emp(name,sal) values(“灭霸”,5);
查询所有员工姓名和对应的部门名
select e.name,d.name from emp e left join dept d on e.dept_id=d.id;
查询所有部门的名称,地点和对应的员工姓名和工资
select d.name,loc,e.name,sal
from emp e right join dept d on e.dept_id=d.id;

关联查询总结:

如果需要同时查询多张表的数据使用关联查询
关联查询包括:等值链接,内连接和外连接
等值链接和内连接查询的是两个表的交集数据, 推荐使用内连接
如果需要查询一张表的全部和另外一张表的交集时 使用外连接,只需要掌握左外即可,因为表的位置可以交换

转换

一、将根据字符查询转换后结果,规则为: 'A’转换为’男’,‘B’转换为’女’,其他字符转换为’未知’,请用一个SQL语句写出。
select case when 字段='A’ then '男’ when 字段='B’ then '女 ’ else '未知’end from 表名;

中文问题:

错误原因是客户端和MySQL之间编解码字符集不一致导致的
解决方案: 修改MySQL的解码字符集为gbk
set names gbk;
在这里插入图片描述

JDBC

JavaDataBaseConnectivity: Java数据库链接
学习JDBC主要学习的就是如何通过Java语言和MySQL数据库进行链接并执行SQL语句.
JDBC是Sun公司提供的一套专门用于Java语言和数据库进行链接的API(Application Programma Interface应用程序编程接口)
为什么使用JDBC?
Sun公司为了避免Java程序员,每一种数据库软件都学习一套全新的方法,通过JDBC接口将方法名定义好, 让各个数据库厂商根据此接口中的方法名写各自的实现类(就是一个jar文件, 称为数据库的驱动) ,这样Java程序员只需要掌握JDBC接口中方法的调用,即可访问任何数据库软件.
如何通过JDBC链接数据库并执行SQL语句
创建Maven工程
在工程的pom.xml文件中 添加MySQL驱动的依赖坐标
创建cn.tedu.Demo01.java文件 添加以下代码
在这里插入图片描述

执行SQL语句的对象Statement

execute(“sql”); 此方法可以执行任意SQL语句, 但建议执行DDL(数据库相关和表相关的SQL语句)
int row = executeUpdate(“sql”); 此方法用来执行增删改相关的SQL语句, 返回值表示生效的行数
ResultSet rs = executeQuery(“sql”); 此方法用来执行查询相关的SQL语句,返回值ResultSet叫做结果集对象,查询到的数据都装在此对象中

数据库连接池DBCP

DataBaseConnectionPool, 数据库连接池
作用: 将连接重用,从而提高执行效率
在这里插入图片描述
如何使用数据库连接池?
在这里插入图片描述

SQL注入:

往本应该传值的地方,传递进来的SQL语句,导致原有SQL语句的逻辑发生改变, 这个过程称为SQL注入

PreparedStatement预编译的SQL执行对象

此对象可以将编译SQL语句的时间点提前,提前后可以将SQL语句逻辑部分提前锁死, 用户输入的内容将不能影响原有SQL语句的逻辑部分,从而解决了SQL注入的问题
如果SQL语句中存在变量,则必须使用PreparedStatement,解决SQL注入问题, 而且可以提高开发效率(避免了拼接字符串) 
如果SQL语句中没有变量,可以使用Statement或PreparedStatement

数据库常见错误

1.用户名或密码错误: 检查用户名或密码
在这里插入图片描述
2.值的数量 和字段数量不匹配, 检查表的字段是否正确,检查插入的值是否正确
在这里插入图片描述
3.主键值重复了
在这里插入图片描述
4.值不能为null
在这里插入图片描述
5.JDBC链接数据库时的报错: 代表没有启动MySQL服务, 在我的电脑上右键管理 找到Mysql服务右键开启即可
在这里插入图片描述
6.个别MySQL版本出现的SSL异常, 在连接数据库的url上面添加&useSSL=false 即可解决
在这里插入图片描述
7.参数位置超出范围, ?的数量和替换问号时?的位置不匹配
在这里插入图片描述

SpringBoot

在这里插入图片描述

Web服务软件做了那些事儿?

web服务软件就是传奇老师带着写的webServer, 也就是Tomcat
负责建立底层的网络连接
根据客户端请求的静态资源路径找到对应的静态资源文件并把该文件返回给客户端
举例:http://localhost:8080/index.html
根据客户端请求的动态资源路径找到对应的Controller里面的方法并且执行
举例:http://localhost:8080/hello
Web服务软件自身不提供任何业务功能,通过Controller给工程添加具体的业务功能

SSM三大框架

Spring框架(第四阶段讲)
SpringMVC框架(第二阶段到第四阶段)
Mybatis框架(第三阶段到第四阶段)

SpringBoot框架

如果创建一个空工程,在此工程中使用SSM框架时需要添加大量的依赖和书写大量的配置文件, 通过SpringBoot框架可以更加便捷的让工程中引入各种框架, SpringBoot框架帮助我们构建工程.

如何创建SpringBoot工程

1.第一个页面中可以修改创建工程的网址
https://start.spring.io 默认
https://start.springboot.io 备用1
https://start.aliyun.com 备用2
在这里插入图片描述
在这里插入图片描述
2.设置 以下内容
在这里插入图片描述
3.选择创建工程时添加的依赖
在这里插入图片描述
4.点击Finishi等待下载内容
5.如何检查工程是否创建成功?
在idea的底部 找到Build 然后看里面是否出现绿色的对勾
在这里插入图片描述
6.如果第五步没有绿色对勾 , 刷新maven
在这里插入图片描述
7.检查maven是否已经改成aliyun的配置文件
8.如果已经改成aliyun的 还有错的话, 找到.m2文件夹下的repository文件夹删除 ,删除完之后再次重复第6步 刷新maven
9.在工程的static文件夹中添加index.html 页面中显示HelloSpringBoot 启动工程 通过浏览器访问http://localhost:8080 检查是否显示了此页面
10.创建controller.HelloController类 在里面添加hello方法处理/hello请求,给客户端响应一句话, 重启工程,浏览器访问http://localhost:8080/hello 测试是否成功

客户端发出请求的几种方式

通过浏览器的地址栏中发出请求
通过html页面中的超链接发出请求
通过html页面中的form表单发出请求
通过前端框架发出请求

同步请求和异步请求

同步: 指单线程依次做几件事
异步: 指多线程同时做几件事
1.同步请求: 指客户端浏览器只有一个主线程, 此线程负责页面的渲染和发出请求等操作, 如果此主线程发出请求的话则停止渲染而且会清空页面显示的内容 直到服务器响应了数据后才能再次显示, 由于主线程清空了原有显示的内容所以只能实现页面的整体刷新(整体改变)
2.异步请求: 指客户端的主线程只负责页面渲染相关操作,发请求的事儿由新的子线程操作, 这样子线程发出请求时页面不需要清空,而且可以将查询回来的数据展示在原有页面基础之上, 这样实现的效果就叫做页面的局部刷新

客户端发出请求的几种方式

通过浏览器的地址栏中发出请求 同步请求
通过html页面中的超链接发出请求 同步请求
通过html页面中的form表单发出请求 同步请求
通过前端框架发出请求 异步请求

工程中使用数据库需要做的几件事:

1.在pom.xml中添加 MySQL依赖和数据库连接池依赖,从jdbc01工程中去复制两个依赖粘贴到新工程中, 然后刷新maven(必须做)
2.把jdbc01工程中的DBUtils 复制到新工程的utils包下面
在这里插入图片描述

Mybatis框架

此框架是目前最流行的数据持久层框架,是对JDBC代码进行了封装, 程序员只需要通过注解或配置文件的方式提供需要执行的SQL语句,框架会自动根据SQL语句生成出JDBC代码,从而提高执行效率
如何使用Mybatis框架?

1.创建boot2-1工程 , 创建工程时需要勾选3个内容分别是:
Web->Spring Web
SQL-> Mybatis Framework
SQL-> MySQL Driver
在这里插入图片描述
2.在application.properties配置文件中书写连接数据库的信息

spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/empdb?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false

客户端如何发出异步请求

1.通过Axios框架发出异步请求
2.此框架就是一个普通的js文件 页面需要使用此框架时需要将此文件引入到页面中
3.从苍老师文档服务器中找到axios框架地址

Get请求和Post请求

从字面意思理解, Get是跟服务器要数据, Post是给服务器传数据
Get: 请求参数写在请求地址的后面(可见),请求参数有大小限制只能穿几k的数据(不能处理文件上传)
应用场景: 查询请求一般都会使用get, 删除也会使用get请求
Post:请求参数放在请求体里面(不可见),参数没有大小限制
应用场景: 文件上传, 带有敏感信息的请求(比如注册登录时有密码)

后端的MVC设计模式

把实现一个业务的代码划分为三部分,分别是: 页面相关(V),业务逻辑相关©,数据相关(M)
M:Model 数据模型, 对应的代码是数据库相关的Mapper部分
V:View 视图, 对应所有页面相关内容
C:Controller 控制器,对应的是Controller相关代码
实现一个业务的顺序: V页面相关代码->C Controller相关代码->M 数据库Mapper相关代码
排错时也是从这三部分代码中找问题
后端MVC涉及模式中的V页面相关,前端工程师将页面又划分为了MVC三部分

前后端分离

1.如果前后端不分离, 后端服务器需要两套代码来应对 手机客户端和浏览器客户端, 因为不同的客户端的需求内容是不一样的,这样后端的开发效率就会受影响.
在这里插入图片描述
2.前后端分离:指在Controller中不再处理页面相关内容, 浏览器客户端需要先请求页面,页面加载完之后从页面中再次发出请求获取数据, 得到数据后把数据展示在页面中,这个过程属于页面的局部刷新, 同步请求只能实现页面的整体刷新无法实现局部刷新, 所以以后不再使用同步请求, 全部使用异步请求,因为以后工作基本全是前后端分离思想.
在这里插入图片描述

JSON

JSON是一种轻量级的数据交换格式(数据封装格式)
客户端和服务器之间需要互相传递数据,当需要传递复杂数据时需要按照特定的格式将数据进行封装,JSON就是这样一个通用格式.

服务器和客户端之间如何传递复杂数据

在这里插入图片描述

如何通过Session对象记住登录状态

1.在登录成功时把当前客户端登录的user用户对象保存到当前客户端所对应的Session对象里面,
2.每个客户端进入到首页index.html时会立即发请求获取当前客户端登录的用户对象, 服务器接收到请求后会从当前客户端所对应的Session对象里面获取曾经保存过的用户对象(前提是登陆过),如果没有登录直接获取得到的是null返回给客户端,此时客户端得到的是""空字符串, 客户端判断是否是空字符来表示是否登录过, 通过给isLogin赋值true或false来控制页面显示的内容

上传图片注意事项

1.在application.properties里面填写最大上传文件大小的配置信息
在这里插入图片描述
2.在application.properties里面填写配置静态资源文件夹的信息
在这里插入图片描述

SpringBoot常见错误列表:

解决问题的思路:

1.检查页面中是否报错,在浏览器中按F12 查看console控制台的报错, 此时可能会得到前端的错误提示信息和后端相关的错误码(404,500,400),
2.查看idea控制台里面的报错
3.如果页面中没有展示出数据可以通过浏览器直接向异步请求的地址发出请求,检查是否得到了数据,如果浏览器中显示了JSON格式的数据说明服务器正常返回了数据此时Controller和Mapper是没有问题的,说明此时出错的是页面, 如果说没有数据代表服务器的问题检查Controller和Mapper相关的代码

浏览器中显示404状态码
404代表找不到资源
找不到静态资源: 比如 *.html *.jpg *.xxx
检查浏览器请求路径是否正确
检查文件是否保存在了正确的位置(一般放在static文件夹下面)
如果上面两种情况都没有问题,重新编译工程并重启工程 Build->ReBuild
找不到动态资源: 比如 /hello 由controller处理的路径称为动态资源
检查浏览器请求路径是否正确
检查Controller是否创建在了工程自带的包的里面
检查是否在Controller类里面的类名上面添加@Controller注解
检查Controller里面RequestMapping注解中处理的路径是否正确
如果上面两种情况都没有问题,重新编译工程并重启工程 Build->ReBuild
浏览器显示500状态码
500代表服务器执行错误, 此时第一时间查看idea控制台的错误,里面会有错误相关的提示,根据提示信息再分析具体哪里错了.

a.Controller中处理了相同的路径
在这里插入图片描述
b.查询单个对象的信息时查询结果中包含了多个结果会报以下错误
在这里插入图片描述
c.在Vue对象实例化之前访问对象报错, 目前我们接触到的写代码的位置只有created方法中是实例化过程中的方法,在此方法中访问Vue对象需要用this而不是变量名v, 如果使用v则会在浏览器控制台中报以下错误
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值