java web2(黑馬)

數據庫設計

簡介

1.軟件的研發步驟

2.數據庫設計概念

>??數據庫設計就是根據業務系統的具體需求,結合我們所選用的DBMS,為這個業務系統構造出最優

的數據存儲模型

>??建立數據庫中的表結構以及表與表之間的關聯關系的過程,

>? 簡單來說就是有哪些表?表里有哪些字段?表和表之間有什么關系?

3.數據庫設計的步驟

① 需求分析? ?(數據是什么?數據具有哪些屬性? 數據與屬性的特點是什么)

② 邏輯分析? (通過ER圖對數據庫進行邏輯建模,不需要考慮我們所選用的數據庫管理系統)

③ 物理設計? (根據數據庫自身的特點把邏輯設計轉換為物理設計)

④ 維護設計? (1.對新的需求進行建表; 2.表優化)

表關系

>??一對一
?如:? 用戶和用戶詳情
( 一對一關系多用于表拆分,將一個實體中經常使用的字段放張表,不經常使用的字段放另一張

表,用于提升查詢性能)

實現方式:在任意一方加入外鍵,關聯另一方主鍵,并且設置外鍵為唯一。

>??一對多(多對一)

?如:? 部門和員工
? ? (一個部門對應多個員工,一個員工對應一個部門)

實現方式:在多的一方建立外鍵,指向一的一方的主鍵。

>??多對多

?如:商品 和 訂單

(一個商品對應多個訂單,一個訂單包含多個商品)

實現方式:建立第三張中間表,中間表至少包含兩個外鍵,分別關聯兩方主鍵。

多表查詢

概念

>? 笛卡爾積:取 A,B集合所有組合情況

>? 多表查詢:從多張表查詢數據。

? ?1.連接查詢:
? ? ? ? ? > 內連接:相當于查詢A 、B交集數據
? ? ? ? ? > 外連接:

? ? ? ? ? ? ? 左外連接:相當于查詢A表所有數據和交集部分數據

? ? ? ? ? ? ? 右外連接:相當于查詢B表所有數據和交集部分數據
? ?2.子查詢

內連接

1.內連接查詢語法

? ? ? ? >? ?隱式內連接

? ? ? ? ?SELECT 字段列表 FROM 表1,表2..WHERE 條件;

? ? ? ? >? ?顯示內連接

? ? ? ? ?SELECT 字段列 表 FROM 表1 [INNER] JOIN 表2 ON 條件;

注:INNER可以省略不寫

外連接

1.外連接查詢語法

? ? ? ? ? ? ? >? 左外連接

? ? SELECT 字段列表 FROM 表1 LEFT [OUTER] J0IN 表2 ON 條件;

? ? ? ? ? ? ? >? 右外連接

? ? SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 條件;

注:OUTER可以省略不寫

子查詢

1.概念:查詢中嵌套查詢,稱嵌套查詢為子查詢

2.子查詢根據查詢結果不同,作用不同:

? ? ?>? 單行單列:作為條件值,使用= != > <等進行條件判斷

? SELECT 字段列表 FROM 表 WHERE 字段名 = (子查詢);

? ? ?>? 多行單列:作為條件值,使用in 等關鍵字進行條件判斷

? SELECT 字段列表 FROM 表 WHERE 字段名?in (子查詢);

? ? ?>? 多行多列:作為虛擬表

? SELECT 字段列表 FROM (子查詢) WHERE 條件;

事務

簡介

>? 數據庫的事務(Transaction)是一種機制、一個操作序列,包含了一組數據庫操作命令

>? 事務把所有的命令作為一個整體一起向系統提交或撤銷操作請求,即這一組數據庫命令要么同

時成功,要么同時失敗

>? 事務是一個不可分割的工作邏輯單元

> 語法:

? ? ? ? ? -- 開啟事務

START TRANSACTION;? ? 或者? ? BEGIN;

? ? ? ? ? -- 提交事務

COMMIT;

? ? ? ? ? -- 回滾事務

ROLLBACK;

特征

事務四大特征

原子性: 事務是不可分割的最小操作單位,要么同時成功,要么同時失敗

一致性: 事務完成時,必須使所有的數據都保持一致狀態

隔離性: 多個事務之間,操作的可見性

持久性: 事務一旦提交或回滾,它對數據庫中的數據的改變就是永久的

JDBC

簡介

1.JDBC就是使用Java語言操作關系型數據庫的一套API

2.全稱(Java?DataBase Connectivity)? ?Java 數據庫連接。

3.本質:

? ? ? >? 官方(sun公司)定義的一套操作所有關型數據庫的規則,即接口

? ? ? >? 各個數據庫廠商去實現這套接口,提供數據庫驅動jar包

? ? ? >? 我門可以使用這套接口(JDBC)編程,真正執行的代碼是驅動jar包中的實現類

快速入門

JDBC API詳解

DriverManager

DriverManager(驅動管理類)作用:? ?1. 注冊驅動? ? 2. 獲取數據庫連接

1.注冊驅動

Class.forName("com.mysql.jdbc.Driver");


提示:
MySQL5之后的驅動包,可以省略注冊驅動的步驟

自動加載jar包中META-INF/services/java.sql.Driver文件中的驅動類

2.獲取連接
? ? ? static Connection? ? ? ? ?getconnection(strimg url,string uer, string password)
? ? ?> 參數
? 1.url: 連接路徑
? ? ? ? ? ? ? 語法:jdbc:mysql:/ip地址(域名):端口號/數報庫名稱?參數健值對1&參數健值對2...
? ? ? ? ? ? ? 示例:jdbc:mysq!://127.0.0.1:3306/db1
? ? ? ? ? ? ? 細節:
? ? ? ? ? ? ? ? ?>如果連接的是本機mysql服務器,并且mysql服務默認口是3306,則url可以簡寫? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 為:jdbc:mysql:///數據庫名稱?參數鍵值對

? ? ? ? ? ? ? ? >配置 useSSL=false 參數,禁用安全連接方式,解決警告提示
2.user:用戶名
3.password:密碼

Connection

Connection(數據庫連接對象)作用:1. 獲取執行 SQL 的對象? ?2.管理事務

1. 獲取執行 SQL 的對象

? ? ? ? ?>??普通執行SQL對象

? Statement createStatement()

? ? ? ? ?>??預編譯SQL的執行SQL對象:防止SQL注入

? PreparedStatement prepareStatement (sql)

? ? ? ? ?>??執行存儲過程的對象

? CallableStatement prepareCall (sql)

2. 事務管理

>??MySQL 事務管理

? ? ? ? ? ? ? 開啟事務:BEGIN; / STARTTRANSACTION:

? ? ? ? ? ? ? 提交事務:COMMIT;

? ? ? ? ? ? ? 回滾事務:ROLLBACK;

? ?注:MySQL默認自動提交事務

>??JDBC 事務管理: Connection接口中定義了3個對應的方法

? ? ? ? ? ? ? 開啟事務:setAutoCommit(boolean autoCommit):? true為自動提交事務;false為手動提交事

務,即為開啟事務

? ? ? ? ? ? ? 提交事務:commit()

? ? ? ? ? ? ? 回滾事務:rollback()

Statement

Statement作用:? 1. 執行SQL語句

1. 執行SQL語句

? ? ? ?int executeUpdate(sql): 執行DML、DDL語句

? ? ?返回值:(1)DML語句影響的行數

? ? ? ? ? ? ? ? ?(2)DDL添句執行后,執行成功也可能返回0

? ? ? ?ResultSet executeQuery(sql): 執行DQL語句

? ? ?返回值: ResultSet結果集對象

ResultSet

>ResultSet(結果集對象)作用:

? ? ? 1.封裝了DQL查詢語句的結果

ResultSet stmt.executeQuery(sql): 執行DQL語句,返回 ResultSet 對象

>獲取查詢結果
? ? ? ?boolean next():(1)將光標從當前位置向前移動一行

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(2)判斷當前行是否為有效行
? ? ? ?返回值:? true:有效行,當前行有數據
? ? ? ? ? ? ? ? ? ? ? ?false:無效行,當前行沒有數據

? ? ? ?xxx? ?getXxx(參數): 獲取數據
? ? ? ? ? ? ? >? xxx:數 據類型; 如:int getnt(參數);?Sting getSting(參數)
? ? ? ? ? ? ? >?參數:? Int: 列的編號,從1開始
? ? ? ? ? ? ? ? ? ? ? ? ? ?Sting: 列的名稱

>使用步聚:

? ? ? ? ?1.游標向下移動一行,并判斷該行否有數據:next0)

? ? ? ? ?2.獲取數據:getXxx(參數)

//循環判斷游標是否是最后一行末尾
? ? ? ?whlle(rs.next(){
? ? //獲取數據
? ? ? ?rs.getXxx(參數);

}

PreparedStatement

PreparedStatement作用:? 1.預編譯SQL語句并執行: 預防SQL注入問題

注:SQL注入是通過操作輸入來修改事先定義好的SQL語句,用以達到執行代碼對服務器進行攻擊

的方法

1.預編譯SQL并執行SQL語句

>?獲取 PreparedStatement 對象

? ? ? ? //SQL語句中的參數值,使用?占位符替代

String sql = "select * from user where usemame = ? and password = ?";

? ? ? ?//通過Connection對象獲取,并傳入對應的sql語句

PreparedSlatement pstmt = conn.prepareSlatement(sql);

>?設置參數值

PreparedStatement對象:setXxx(參數1,參數2):給?賦
? ?>?Xxx:數據類型;? 如 setlnt(參數1,參數2)
? ?>?參數:
? ? ? ? ? ? ? 參數1: ? 的位置編號,從1開始
? ? ? ? ? ? ? 參數2: ? 的值

>?執行SQL

executeUpdate():/ executeQuery(); : 不需要再傳遞sql

2.PreparedStatement 原理

在獲取PreparedStatement對像時,將sgl語句發送給mysql服務器,進行檢查,編譯(這些步票很耗時)

執行時就不用再進行這些步票了,速度更快

如果sgl模板一樣,則只需要進行一次檢查、編譯

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87012.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87012.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87012.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Meta 宣布加入 Kotlin 基金會,將為 Kotlin 和 Android 生態提供全新支持

近日 Meta 正式宣發加入了 Kotlin 基金會&#xff0c;如果你對 Meta 不熟悉&#xff0c;那么對于開源了 React Native 的 Facebook 應該不陌生了吧&#xff1f;現在它也正式加入了 Kotlin 領導者的陣營&#xff1a; Kotlin 基金會 是由 Jetbrains 和 Google 共同成立的基金會&a…

緩存系統-淘汰策略

目錄 一、LRU&#xff08;最近最少使用&#xff09; 工作原理 操作流程 基本特征 二、LFU&#xff08;最不常使用&#xff09; 工作原理 操作流程 基本特征 三、ARC 自適應 工作原理 操作流程 基本特征 四、TTL&#xff08;生存時間&#xff09; 工作原理 操作流…

TypeScript 安裝使用教程

一、TypeScript 簡介 TypeScript 是由微軟開發的開源編程語言&#xff0c;是 JavaScript 的超集&#xff0c;添加了靜態類型、接口、枚舉、類等特性&#xff0c;使開發大型應用更安全、可維護、可擴展。最終會被編譯為標準的 JavaScript 代碼在瀏覽器或 Node.js 中運行。 二、…

強化學習系列--dpo損失函數

DPO 概要 DPO&#xff08;Direct Preference Optimization&#xff0c;直接偏好優化&#xff09;是由斯坦福大學等研究團隊于2023年提出的一種偏好優化算法&#xff0c;可用于LLM、VLM與MLLM的對齊訓練。 算法基于PPO的RLHF基礎上進行了大幅簡化。DPO算法跳過了訓練獎勵模型這…

UniApp完全支持快應用QUICKAPP-以及如何采用 Uni 模式開發發行快應用優雅草卓伊凡

UniApp完全支持快應用QUICKAPP-以及如何采用 Uni 模式開發發行快應用優雅草卓伊凡 一、UniApp 對快應用的支持深度 UniApp 已完全支持快應用的開發和發布&#xff0c;具體包括&#xff1a; 兩種渲染模式&#xff1a; Webview 渲染&#xff08;快應用 Light 版&#xff09;&a…

js 允許生成特殊的變量名 基于字符集編碼混淆的 XSS 繞過漏洞 -- Google 2025 Lost In Transliteration

題目實現了一個字符轉換工具 在/file路由用戶可以通過 ct 參數自定義 Content-Type // 文件路由 - 提供靜態文件服務&#xff08;JS和CSS&#xff09;&#xff0c;支持內容類型驗證 app.MapGet("/file", (string filename "", string? ct null, string?…

【仿muduo庫實現并發服務器】LoopThreadPool模塊

仿muduo庫實現并發服務器 1.LoopThread模塊1.1成員變量1.2構造函數13線程入口函數1.4獲取eventloop對象GetLoop() 2.LoopThreadPool模塊2.1成員變量2.2構造函數2.3配置線程數量2.4按照配置數量創建線程2.5依次分配Eventloop對象 1.LoopThread模塊 這個模塊是為了將EventLoop與…

華為云Flexus+DeepSeek征文|基于Dify構建文本/圖像/視頻生成工作流

華為云FlexusDeepSeek征文&#xff5c;基于Dify構建文本/圖像/視頻生成工作流 一、構建文本/圖像/視頻生成工作流前言二、構建文本/圖像/視頻生成工作流環境2.1 基于FlexusX實例的Dify平臺2.2 基于MaaS的模型API商用服務 三、構建文本/圖像/視頻生成工作流實戰3.1 配置Dify環境…

相機-IMU聯合標定:IMU更新頻率

文章目錄 ??簡介?? IMU頻率參數錯誤設置的影響? 相機-IMU聯合標定失敗:Optimization failed!?? 確定IMU更新頻率直接通過 rostopic hz 檢查實際頻率檢查 IMU 驅動或數據手冊從 bag 文件統計頻率在這里插入圖片描述修改 `update_rate` 的注意事項**最終建議****常見問題…

動手實踐:如何提取Python代碼中的字符串變量的值

要提取Python代碼中所有變量類型為字符串的變量的值&#xff0c;但不執行代碼&#xff08;避免安全風險&#xff09;&#xff0c;可以通過靜態分析代碼的抽象語法樹&#xff08;AST&#xff09;來實現。以下是完整的解決方案&#xff1a; 本文由「大千AI助手」原創發布&#xf…

Python中字符串isalpha()函數詳解

在 Python 中&#xff0c;isalpha() 是字符串&#xff08;string&#xff09;類型的內置方法&#xff0c;用于檢查字符串中的所有字符是否都是字母字符&#xff08;alphabetic character&#xff09;。以下是詳細說明&#xff1a; 一、基本功能 返回值&#xff1a;布爾值&…

Gradio全解13——MCP詳解(4)——TypeScript包命令:npm與npx

Gradio全解13——MCP詳解&#xff08;4&#xff09;——TypeScript包命令&#xff1a;npm與npx 第13章 MCP詳解13.4 TypeScript包命令&#xff1a;npm與npx13.4.1 概念區分1. npm概念與運行邏輯2. npx概念及特點 13.4.2 操作示例1. 使用npm執行包2. 使用npx執行包3. 常用npm命令…

《推客小程序全鏈路開發指南:從架構設計到裂變運營》

在移動互聯網流量紅利逐漸消退的今天&#xff0c;如何低成本獲客成為企業營銷的核心痛點。推客小程序作為一種基于社交關系的裂變營銷工具&#xff0c;正成為企業突破增長瓶頸的利器。本文將為您全面解析推客小程序的開發定制全流程&#xff0c;幫助您打造專屬的社交裂變營銷平…

中鈞科技參加中亞數字經濟對話會,引領新疆企業數字化新征程!

6月27 日&#xff0c;烏魯木齊成為數字經濟領域的焦點&#xff0c;中國新疆 - 中亞國家數字經濟和數字貿易企業對話會在此盛大舉行。 來自中亞國家及新疆數字經濟領域的100 余位核心代表齊聚一堂&#xff0c;圍繞數字經濟時代的機遇、挑戰與策略展開深度探討。 本次對話會由新…

k8s一鍵部署tongweb企業版7049m6(by why+lqw)

聲明 1.此貼僅供參考&#xff0c;請根據自身需求在測試環境測試和修改。 安裝準備 1.獲取對應的安裝包和授權,并將授權和安裝包放在同一個目錄下 2.docekr已配置遠程倉庫 3.提前拉取jdk的鏡像&#xff08;這里配置了使用openjdk:8&#xff09; 安裝 將以下內容復制到k8s_…

Qt 與 Halcon 聯合開發六:基于海康SDK設計完整的相機類【附源碼】

在現代工業自動化、機器人視覺、等領域&#xff0c;相機模塊的作用至關重要。通過相機模塊采集到的圖像數據&#xff0c;我們能夠進行一系列的圖像處理和分析。為了高效地控制相機和處理圖像&#xff0c;本篇文章將介紹如何使用Qt和Halcon聯合開發一個相機模塊&#xff0c;幫助…

第7篇:Gin模板引擎——服務端頁面渲染

作者:GO兔 博客:https://luckxgo.cn 分享大家都看得懂的博客 引言 在Web開發中&#xff0c;服務端頁面渲染(SSR)依然是構建動態網頁的重要方式。Gin框架雖然以API開發見長&#xff0c;但也內置了強大的模板引擎支持&#xff0c;基于Go標準庫的html/template包實現。本文將深入…

RagFlow 源碼部署啟動指南

一、環境準備 1. 安裝 uv 和 pre-commit 如果已安裝&#xff0c;可跳過。推薦使用官方方式安裝&#xff0c;避免報錯&#xff1a; pipx install uv pre-commit export UV_INDEXhttps://mirrors.aliyun.com/pypi/simple安裝報錯 使用清華源安裝&#xff1a; pipx install uv…

【Python基礎】12 閑談分享:Python用于無人駕駛的未來

引言&#xff1a;一個程序員的自動駕駛夢想 還記得2016年的那個秋天&#xff0c;我第一次坐進特斯拉Model S的駕駛座&#xff0c;體驗Autopilot功能。當方向盤開始自己轉動&#xff0c;車輛在高速公路上自動跟隨前車時&#xff0c;我的內心涌起了一種奇妙的感覺——這不就是我…

為什么js是單線程?

js單線程&#xff0c;同一時間只能做一件事 。js的單線程 主要與它的用途有關。作為瀏覽器腳本語言&#xff0c;js的主要用途是與用戶互動&#xff0c;以及操作DOM。這決定了它只能是單線程&#xff0c;否則會帶來很復雜的同步問題。如果js同時有兩個線程&#xff0c;一個線程在…