Spring Boot入門6
回顧:
ajax傳送請求
$.get(url,param,function)
$.post(url,param,function)
$.ajax({
url:,
type:,
data:,
success:,
})
校驗使用者名稱:
編寫xml檔案,能夠看懂xml
<書架>
<書>
<書名></書名>
<作者></作者>
<價格></價格>
</書>
</書架>
DOM解析: 一次性將整個文件載入到記憶體中,形成一棵dom樹,可以做增刪改查 , 導致記憶體溢位 ,
SAX解析: 逐行讀取每一行的內容, 讀取速度快
DOM4J: 解析框架, 集成了SAX解析和DOM優點
瞭解什麼是約束: 約束xml文件必須按照怎樣的規則來編寫
json: 是一種輕量級的資料交換格式
{書架:
[
{書:
{書名:"" ,
作者:""
}
}]}
xml和json的區別?
物件如何轉成json格式字串
javascript: JSON.stringify
java : new GSON().toJson(物件)
springboot : return 物件
json格式字串轉物件
js: JSON.parse
java: new GSON().fromJson(str,類.class)
省市聯動案例
SQL : Structured Query Language
一、MySql
1. 資料庫概述
資料庫( Database )是按照資料結構來組織、儲存和管理資料的倉庫 。 資料按照特定的格式儲存起來,使用者可以通過
SQL(Structured Query Language)
對資料庫中的資料進行增刪改查, 這比咱們之前使用檔案來管理資料要方便得多。
- 資料庫 & 表
資料庫管理系統(DataBase Manager System ) , 簡稱 DBMS , 是指一種操作和管理資料庫的軟體,這類軟體用於建立、使用、維護資料庫,對資料庫進行統一管理和控制,以保證資料的完整性和安全性。我們可以通過它訪問資料庫中的表資料
資料庫其實是儲存資料的倉庫,在資料庫中有資料表,我們所存的資料其實都是往資料表裡面儲存,而資料庫又管理者很多張表,表示這幾張表示一批資料的集合。正如我們第一天使用檔案儲存學生資料一樣,如果使用資料庫來儲存,我們就會有一個表叫做
student
表,如果還需要儲存教師資訊,那麼還應該有一個teacher
表 ,而這兩張表正好位於一個數據庫中。
- 常見的資料庫 SQL 適合做
- mysql 開源免費 , 小型資料庫, oracle收購
- oracle 收費 ,大型資料庫,oracle公司產品
- sql server 收費 微軟產品
- SQLite 嵌入式小資料庫 、 移動端常用(Android | ios)
- DB2 收費 , IBM 產品
- H2 開源 ,嵌入式 | 記憶體版 資料庫,純java實現
…
以上資料庫都是關係型資料庫 —> 裡面儲存的資料,可以建立關係。
非關係型資料庫。 NoSql not only sql 不僅僅是sql 適合做快取 購物車
mogodb redis … 秒殺 搶購
2. MySql 安裝
mysql安裝
mysql -uroot -p123456
-u 表示的是 user
-p password
視覺化工具安裝
3. 資料庫操作
- SQL分類:
DDL : 資料定義語言,定義資料庫/表結構 : create建立,drop刪除,alter修改,truncate截斷
DML : 資料操縱語言,操作的是資料 : insert插入,update更新,delete刪除
DCL : 資料庫控制語言,控制的許可權相關 : grant(授權) ,revoke(取消授權)
DQL : 資料查詢語言,查詢資料 : select查詢
增刪改查
資料庫
建立資料庫,刪除資料庫,修改資料庫,檢視資料庫
表
建立表,修改表,刪除表
表中資料
插入資料,修改資料,刪除資料,查詢資料
先使用視覺化工具演練過一次後,再使用命令演示
- 建立資料庫
create database xxx;
- 刪除資料庫
drop database xxx;
- 修改資料庫
# 一般很少修改資料庫 , 如果修改,只會修改資料庫的編碼,這一般很少修改。
alter database xxx character set gbk;
alter database xxx character set utf8;
- 顯示資料庫
show databases;
# 顯示這個資料庫建立的語句,以及編碼是什麼
show create database xxxx;
4.欄位型別介紹
java mysql
int int
float float
double double
char(字元)/String(字串) char/varchar 固定長度(即便長度不夠,會補空格) | 可變長度 (資料多長,長度多長)
Date date(日期)|time(時間)|datetime (日期和時間)| timestamp(日期時間 ,會自動使用當前時間):
檔案型別 BLOB | TEXT : TEXT 文字型別 , BLOB 二進位制型別
約束:
單表約束:
主鍵約束: primary key
唯一約束: unique
非空約束: not null
5. 資料庫表操作
先使用視覺化工具演練過一次後,再使用命令演示
- 建立資料表
語法: create table 表名(欄位名 型別(長度) 【約束】 , 欄位名 型別(長度)[約束]);
CREATE TABLE aa (id INTEGER PRIMARY KEY AUTO_INCREMENT , username VARCHAR(25));
- 刪除資料表
語法: delete from --表名
delete from aa; -- 只會清空表資料,不釋放空間(序號接上以前),表依然存在
truncate table aa ; -- 清空表資料,釋放空間(序號從1開始),表依然存在
DROP TABLE aa; -- 刪除表,一切都消失
- 修改資料表
alter table 表名 add 列名 型別(長度) 約束; --修改表新增列.
alter table 表名 modify 列名 型別(長度) 約束; --修改列的型別長度及約束.
alter table 表名 change 舊列名 新列名 型別(長度) 約束; --修改列名.
alter table 表名 drop 列名; --刪除列.
rename table 表名 to 新表名; --修改表名(比較少用)
- 顯示資料表
show tables ; -- 顯示當前資料庫的所有表
desc aa; --檢視具體某張表的結構
show create table aa; --顯示建表語句
6. 約束介紹
- 主鍵約束:primary key
關鍵字(primary key) 是表中的一個或多個欄位,它的值用於唯一地標識表中的某一條記錄 。 比如如何突出一名學生的唯一性,一般我們採用學號來表示,如何表示一個人的唯一,我們可以使用身份證號來表示。但是在資料庫範疇裡面,表示一條記錄的唯一,我們通過會增加id 列來表示主鍵。
主鍵必須是唯一、 不能為空 , 可以設定為自增長。
# 主鍵約束可以在建表的時候就給定
create table stu(id int primary key auto_increment , name varchar(25));
# 也可以後面在修改,增加主鍵約束
create table stu(id int , name varchar(25));
alter table stu modify id int primary key ;
# 如果還想增加自增長,那麼還可以繼續修改
alter table stu modify id int auto_increment;
- 唯一約束:unique 主鍵的值 也是唯一的。
唯一約束指的是表示某個列的值唯一不允許重複。
# 可以在建表的時候給出
create table stu(id int primary key auto_increment , name varchar(25) unique);
# 或者後面再修改
create table stu(id int primary key auto_increment , name varchar(25));
alter table stu modify name varchar(25) unique;
- 非空約束:not null
非空約束,指的是具體某一列不允許為空,必須有值。
# 可以在建表的時候給出
create table stu(id int primary key auto_increment , name varchar(25) not null);
# 或者後面再修改
create table stu(id int primary key auto_increment , name varchar(25));
alter table stu modify name varchar(25) not null;
7. 表記錄CRUD
該小節注重的是表中資料的操作。
1. 增加
--新增一條記錄,對具體某些列賦值。順序要對應 ,若是字元或者日期需要新增 '' 引號
insert into 表 (列名1,列名2,列名3..) values (值1,值2,值3..);
--新增一條記錄,表中的所有列都要賦值。
insert into 表 values (值1,值2,值3..);
2. 刪除
-- 刪除的命令和上面刪除表的命令非常相似。 只是多了where條件而已。
delete from 表名 [where 條件];
3. 修改
-- 修改表,針對具體某一列進行賦值
update 表名 set 欄位名=值,欄位名=值 [where 條件];
-- 如: 更新張三的年齡 ,後面的where 用於限定找到張三
update student set age = 18 where name = '張三';
--如果後面不帶where, 那麼將會把整張表的所有學生年齡都改為18
update student set age = 18;
4. 查詢
- 準備表中資料
--準備一張商品分類表(分類ID,分類名稱,分類描述)
create table category(
cid int primary key auto_increment,
cname varchar(10),
cdesc varchar(50)
);
--準備一張商品表(商品編號,商品名稱,商品價格,商品描述,商品分類編號)
create table product(
pid int primary key auto_increment,
pname varchar(10),
price double,
pdesc varchar(50),
cno int
);
--資料的準備
insert into category values(null,'手機數碼','黑馬生產的小手機');
insert into category values(null,'鞋靴箱包','傳智生產的包包');
insert into category values(null,'香菸酒水','黃鶴樓,茅臺');
insert into category values(null,'饞嘴零食','衛龍辣條,周黑鴨');
insert into product values(null,'錘子',2999,'可以砸榴蓮的手機',1);
insert into product values(null,'小米',1599,'為發燒而生',1);
insert into product values(null,'李寧',99,'不走尋常路',2);
insert into product values(null,'耐克',399,'just do it',2);
insert into product values(null,'黃鶴樓',20,'飯後一根菸,勝做活神仙',3);
insert into product values(null,'衛龍辣條',5,'衛龍辣條加料不加價',4);
insert into product values(null,'老乾媽辣椒醬',9,'永遠不變的味道',4);
insert into product values(null,'老幹娘辣椒醬',19,'永遠不變的味道',4);
- 簡單查詢
--語法如下:
select [distinct]*[列名,列名] from 表 [where 條件].
--例子:
* 1.查詢所有的商品. select * from product;
* 2.查詢商品名和商品價格. select pname,price from product;
* 3.別名查詢.使用的關鍵字是as.as可以省略的.
* 3.1表別名: select * from product as p;
* 3.2列別名:select pname as pn from product;
* 4.去掉重複值. select distinct price from product;
圖書借閱系統,
誰來借圖書。
張三 1
張三 1
張三 1
- 條件查詢
* 1.查詢商品名稱為十三香的商品所有資訊:
* select * from product where pname = '十三香';
* 2.查詢商品價格>60元的所有的商品資訊:
* select * from product where price > 60;
-- where後的條件寫法:
* > ,<,=,>=,<=,<>
* like 使用佔位符 _ 和 % _代表一個字元 %代表任意個字元.
* select * from product where pname like '%新%';
* in 在某個範圍中獲得值.
* select * from product where pid in (2,5,8);
* between 12 and 56
- 排序查詢
* 1.查詢所有的商品,按價格進行排序.(asc-升序,desc-降序)
* select * from product order by price;
* 2.查詢名稱有新的商品的資訊並且按價格降序排序.
* select * from product where pname like '%新%' order by price desc;
按價格排序 、 分數排序 、 日期 、 年齡...
order by 列 asc(升序) | desc(降序)
- 聚合查詢
* sum(),avg(),max(),min(),count();
* 1.獲得所有商品的價格的總和.--select sum(price) from product;
* 2.獲得所有商品的平均價格.--select avg(price) from product;
* 3.獲得所有商品的個數.--select count(*) from product;
- 分組查詢
* 1.根據cno欄位分組,分組後統計商品的個數.
* select cno,count(*) from product group by cno;
* 2.根據cno分組,分組統計每組商品的平均價格,並且平均價格> 60;
* select cno,avg(price) from product group by cno having avg(price)>60;
having 關鍵字可以讓我們篩選成組後的各種資料,可以理解為對分組後的資料進行再次過濾
- 分頁查詢
-- 第一個?表示跳過前面多少條 , 第二個?表示返回多少條記錄。
select * from product limit ? , ? ;
/*
表的欄位型別:
int,double,boolean
char(10) abcdefg 儲存字串 固定長度字串
不滿10位,會以空格佔滿10位
varchar(10) abcdefg 儲存字串 可變長度字串
不滿10位, 不會以空格佔滿10位 , 只佔7位
text : 大文字資料可以使用
date : 年月日
datetime : 年月日 時分秒
timestamp: 時間戳 , 年月日,時分秒, 2046年
create table 表名(
列名 列的型別 [列的約束],
列名2 列的型別 [列的約束]
);
*/
後臺基本操作
登陸
Mysql -u root -p
123456
show databases; 檢視資料庫
– 建立一張person表: 編號,姓名,年齡,出生日期
create table person(
pid int,
name varchar(30),
age int,
birthday timestamp
);
– 刪除表
drop table person;
– 修改表
– 新增列名 add
alter table person add sex varchar(2);
– 重定義列 modify
alter table person modify sex int;
– 修改列名 change
alter table person change sex gender int;
– 刪除列名 drop
alter table person drop gender;
– 修改表名
rename table person to per;
– 查看錶
show tables;
show create table person;
desc person;
/*
表的約束: 約束表中的資料必須符合某種規則
主鍵約束: 唯一併且不能為空 primary key
唯一約束: 唯一可以為空 unique
非空約束: 不能為空 not null
表的五大約束:
主鍵約束
唯一約束
非空約束
檢查約束 check 性別 男,女,妖
外來鍵約束
*/
create table student(
sid int primary key,
name varchar(20) unique,
age int not null
);
/*
資料庫/表 : create, drop, alter
表中資料的增刪改: insert ,delete ,update
*/
/*
插入資料:
不指定列名,需要所有列都插入值
insert into 表名 values(列值1,列值2);
指定了列名,只需要插入對應列的值
insert into 表名(sid,name) values(值1,值2)
*/
create table student(
sid int primary key,
name varchar(20) unique,
age int not null
);
insert into student values(1,'zs',18);
insert into student(sid,age) values(3,20);
/*
刪除資料: delete
delete from 表名 [where 條件(sid=1)]
delete from 表名 逐行刪除表中所有資料
請說一下delete 和 truncate 的區別
DML DDL
逐行刪除資料 先刪除表,再建立表
效率高
*/
delete from student where sid=1;
delete from student;
truncate table student;
/*
更新:update
update 表名 set 列名=新的值,列名=新的值 [where 條件] ;
*/
– 更新所有記錄
update student set age=25;
– 更新3號記錄的名字
update student set name='lisi' where sid=3;
/*
查詢的操作:
準備工作,商品表,商品分類表
auto_increment : 表的自增屬性, 當cid值插入為null的時候,資料庫自動賦值
1.建立商品分類表category
分類的編號,分類名稱,分類描述
create table category(
cid int primary key auto_increment,
cname varchar(20) unique,
cdesc varchar(100)
);
insert into category values(null,'手機數碼','黑馬製造');
2.建立商品表
```
create table product(
pid int primary key auto_increment,
pname varchar(10),
price float,
pdesc varchar(100),
cno int
);
```
修改配置檔案,支援中文:
1.開啟計算機服務,關閉mysql服務
2.找到C:\Program Files (x86)\MySQL\MySQL Server 5.5\my.ini
找到第57行:
default-character-set=gbk
3.開啟計算機服務,啟動mysql服務
*/
insert into category values(null,’手機數碼’,’黑馬製造’);
insert into category values(null,’鞋靴箱包’,’傳智製造’);
insert into category values(null,’香菸酒水’,’傳智製造’);
insert into category values(null,’饞嘴零食’,’傳智製造’);
insert into product values(null,’錘子’,2999,’可以砸榴蓮的手機’,1);
insert into product values(null,’小米’,1599,’為發燒而生’,1);
insert into product values(null,’李寧’,99,’不走尋常路’,2);
insert into product values(null,’耐克’,399,’just do it’,2);
insert into product values(null,’黃鶴樓’,20,’飯後一根菸,勝做活神仙’,3);
insert into product values(null,’衛龍辣條’,5,’衛龍辣條加料不加價’,4);
insert into product values(null,’老乾媽辣椒醬’,9,’永遠不變的味道’,4);
insert into product values(null,’老幹娘辣椒醬’,19,’永遠不變的味道’,4);
/*
查詢語句:
查詢所有商品
select 要查詢的列名 from 表名 [where 條件]
select * from product;
* 號代表查詢所有列
where條件的寫法:
關係運算符: > >= = < <= != <>
邏輯運算子: and or not
其它運算子:
is null
is not nll
in(範圍) 判斷是否滿足這個範圍條件
between..and.. 是否中區間內
like
_
%
*/
select pname from product;
– 查詢價格大於400的所有商品
select * from product where price > 400;
– 查詢價格在9-99之間的所有商品
select * from product where price>=9 and price <=99;
– 寫法
select * from product where price between 9 and 99;
– 查詢1,2,3分類對應的商品資訊
select * from product where cno=1 or cno=2 or cno=3;
select * from product where cno in(1,2);
– 查詢名稱為null的記錄
insert into product values(null,null,19,'永遠不變的味道',4);
– 所有的值和null進行比較,結果都null
select * from product where pname=null;
select * from product where pname is null;
/*
模糊查詢: like
_ : 匹配單個字元
% : 匹配任意個數的字元
*/
– 查詢名稱包含 辣 字所有商品資訊
select * from product where pname like '%辣%';
– 查詢名稱中第三個字是辣的商品資訊
select * from product where pname like '__辣%';
/*
聚合統計:
統計所有商品的總價 sum()
商品的總數 count()
商品平均價格 avg()
商品最大價格 max()
商品最小价格 min()
*/
– 商品的總價
select SUM(price) from product;
– 商品的總數
select COUNT(*) from product;
– 商品平均價格
select avg(price) from product;
– 最大價格
select MAX(price) from product;
– 最小价格
select MIN(price) from product;
/*
分組統計:
select 分組的條件,分組的目的 from 表名 group by 分組條件;
分組的本質:先按照分組的條件進行排序,然後再做聚合操作
where 和 having
where 分組之前執行的 , 不能接聚合函式
having 與Group by 結合在一起使用的,分組之後執行的,可以接聚合函式
*/
– 統計每種分類商品數量
select cno,COUNT(*) from product group by cno;
– 統計每種分類商品數量,平且數量大於1的
select cno,COUNT(*) from product group by cno having COUNT(*)>1;
– 排序 order by 列名 asc|desc
– asc : ascend 升序 (預設)
– desc: descend 降序
– 按照商品價格對商品進行排序
select * from product order by price asc;
select * from product order by price desc;
/*
select 輸出的內容 from 從哪張表查詢 where 條件過濾 group by 分組的條件 having 分組之後的條件過濾 order by 排序 limit
*/
/*
分頁 : limit 起始索引(從0開始),查詢幾條
*/
– 查詢第1-3條記錄 第1頁資料
select * from product limit 0,3;
– 查詢第2頁資料
select * from product limit 3,3;
– 查詢第3頁資料
select * from product limit 6,3;
– 角標的演算法 : (頁碼-1)*每頁顯示的數量
select * from product;
/*
什麼SQL: 結構化的查詢語言
SQL分類:
DDL: 資料定義語言,結構: create ,drop ,alter ,truncate
DML: 資料操縱語言,資料: insert ,update,delete
DCL: 資料控制語言,控制的許可權
DQL: 資料查詢語言: select , where ,group by ,having,order by ,limit
資料庫:
增加: create database 資料庫名稱
刪除: drop database 資料庫名稱
修改: alter database 名稱 character set 字元編碼
查詢:
show databases;
show create database 名稱
其它:
use 名稱
表
增加: create table 表名(
列名 列的型別 [列的約束] auto_increment,
列名 列的型別
)
列的型別: int ,double ,float , varchar(20), datetime,timestamp
列的約束:
primary key 主鍵約束
unique 唯一約束
not null 非空約束
刪除: drop table 表名
修改:
新增列: alter table 表名 add 列名 列的型別
重定義列: alter table 表名 modify 列名 新的型別
修改列名: alter table 表名 change 舊的列名 新的列名 型別
刪除列名: alter table 表名 drop 列名
修改表名: rename table 表名 to 新表名
查詢:
show tables;
show create table 名稱
desc 名稱 : 查詢表結構
表中資料:
增加: insert into 名稱 values(值1,值2,值3)
刪除: delete from 名稱 [where 條件]
修改: update 表名 set 列名=值,列名=值 [where 條件]
查詢: select 輸出的列名 from 表名 where 條件 group by 分組條件 having 分組之後的條件過濾 order by 排序的列名 asc|desc limit 起始索引,顯示幾條
*/