1. 程式人生 > >Spring Boot入門6

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 適合做
  1. mysql 開源免費 , 小型資料庫, oracle收購
  2. oracle 收費 ,大型資料庫,oracle公司產品
  3. sql server 收費 微軟產品
  4. SQLite 嵌入式小資料庫 、 移動端常用(Android | ios)
  5. DB2 收費 , IBM 產品
  6. 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 intovalues (值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 起始索引,顯示幾條

*/