AA. 我的開發環境配置與核心工具鏈解析
一、開發環境全覽
C:\Users\Again>java -version
java version "21.0.1" 2023-10-17 LTS
Java(TM) SE Runtime Environment (build 21.0.1+12-LTS-29)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.1+12-LTS-29, mixed mode, sharing)C:\Users\Again>javac -version
javac 21.0.1C:\Users\Again>node -v
v20.18.1C:\Users\Again>npm -v
10.8.2C:\Users\Again>git --version
git version 2.47.1.windows.2C:\Users\Again>python --version
Python 3.11.5C:\Users\Again>mysql --version
mysql Ver 8.0.28 for Win64 on x86_64 (MySQL Community Server - GPL)C:\Users\Again>mvn -v
Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: D:\apache-maven-3.9.9-bin\apache-maven-3.9.9
Java version: 21.0.1, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-21
Default locale: zh_CN, platform encoding: UTF-8
OS name: "windows 11", version: "10.0", arch: "amd64", family: "windows"
通過網盤分享的文件:
Java基礎常用軟件
鏈接:
https://pan.baidu.com/s/1I2w-dFsGkqfdjMAOFi-QOA
提取碼:aet4
二、核心開發工具鏈深度解析
(一)Java生態系統基建
1. JDK 21.0.1 LTS(Oracle HotSpot)
- 版本特性:
? 作為LTS版本提供至2030年的長期支持
? 引入結構化并發(JEP 453)、記錄模式(JEP 449)等生產級特性
? G1 GC優化實現更低延遲與更高吞吐量 - 環境關聯:
終端顯示javac 21.0.1
與運行時路徑C:\Program Files\Java\jdk-21
,已配置系統環境變量JAVA_HOME
指向該路徑
2. Apache Maven 3.9.9
- 工程化能力:
? 基于D:\apache-maven-3.9.9-bin
的標準安裝
? 自定義本地倉庫配置:
? 支持Maven Enforcer插件強制版本約束,集成SpotBugs實現靜態代碼分析<!-- settings.xml 關鍵配置 --> <localRepository>D:\dev_repo\maven_local_repository</localRepository>
通過網盤分享的文件:
apache-maven-3.9.9-bin.zip
鏈接:
https://pan.baidu.com/s/17hJ20ZZz1raIWB41G75Hqw
提取碼:8wdh
(二)JavaScript全棧工具鏈
1. Node.js v20.18.1(Current)
- 運行時特性:
● 內置fetch API原生支持,告別node-fetch
第三方庫
● 實驗性WebAssembly垃圾回收(JEP 8305852)提升性能
● 終端顯示版本與npm 10.8.2配套,符合node -v
輸出 - 典型應用:
# 前端構建示例(Vite + React) npx create-vite@latest my-app --template react cd my-app && npm install && npm run dev
2. npm 10.8.2
- 依賴管理升級:
? 扁平化依賴樹默認啟用(package-lock.json
自動生成)
? 支持npm install --workspace
多包并行安裝
? 終端輸出版本與Node.js 20.x完美兼容,無版本沖突風險
(三)關系型數據庫中樞
MySQL 8.0.28 Community Edition
- 企業級特性落地:
? 窗口函數實戰:
? 原子DDL支持(如SELECT order_date, amount,SUM(amount) OVER (ORDER BY order_date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg FROM sales;
CREATE TABLE ... IF NOT EXISTS
)
? JSON數據類型優化,支持JSON_TABLE()
relationalization查詢 - 環境適配:
終端顯示Win64原生支持
,基于MySQL Installer完成圖形化安裝,配置文件位于C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
三、高效開發IDE矩陣
1. IntelliJ IDEA 2024.1(Ultimate Edition)
- Java開發深度集成:
? 內置Maven/Gradle控制面板,同步終端mvn -v
的本地倉庫配置
? AI輔助編碼(Code With Me)支持自然語言生成代碼
? 可視化JVM監控工具,實時追蹤G1 GC狀態(對應JDK 21特性) - 效率插件推薦:
? Lombok Plugin(簡化POJO開發)
? Docker Integration(一鍵部署Spring Boot容器)
通過網盤分享的文件:
02、Java開發工具-IDEA
鏈接:
https://pan.baidu.com/s/1C8CFC7Q-jlqIlmUKwcIDtA
提取碼:3ah5
2. Navicat Premium 17
- 多數據庫管理中樞:
? 同時連接MySQL 8.0.28與其他數據庫(如PostgreSQL 16)
? 可視化查詢生成器支持窗口函數圖形化配置
? 數據傳輸功能實現跨數據庫結構同步 - 性能優化工具:
? SQL Explain執行計劃分析
? 慢查詢日志實時監控(需配合MySQL開啟slow_query_log
)
通過網盤分享的文件:
Navicat Premium 17.0.8 (x64).7z
鏈接:
https://pan.baidu.com/s/1CT50564aJ8vJIHAKNXtw9A
提取碼:wdhu
四、工具鏈協同工作流
五、環境擴展建議
- 版本管理:通過
asdf
工具實現JDK/Node.js多版本切換 - 容器化:基于Docker Desktop構建
java:21-alpine
+node:20-bullseye
開發容器 - 自動化:配置GitHub Actions實現Maven構建與MySQL數據遷移自動化
這套開發環境以長期支持版本為核心,結合標準化工具鏈與現代IDE特性,既能滿足企業級項目的穩定性需求,又可快速響應新技術棧的探索需求。終端輸出的版本信息形成完整的工具鏈閉環,為開發、測試、部署全流程提供可追溯的環境基準。
BB.如何在IntelliJ IDEA中新建Spring Boot項目(基于JDK 21 + Maven)
一、環境準備
確保已安裝:
- JDK 21.0.1(終端驗證:
java -version
顯示21.x) - Apache Maven 3.9.9(終端驗證:
mvn -v
顯示3.9.9) - IntelliJ IDEA 2024.1(支持Spring Boot 3.x+與JDK 21)
二、新建項目步驟
1. 啟動項目創建向導
- 打開IDEA,點擊 新建項目(或快捷鍵
Ctrl+Shift+N
),進入項目配置界面。
2. 選擇Spring Boot模板
- 左側列表:找到并選中 Spring Boot(紅色框標記,如圖所示)。
- 右側配置:
- 名稱:輸入項目名(如
springboot
)。 - 位置:選擇本地存儲路徑(如
F:\springboot_CSND\springboot
)。 - 語言:默認 Java(適配JDK 21)。
- 構建工具:選擇 Maven(紅色框標記,與終端
mvn -v
配置一致)。 - 組/工件:默認
com.example
(可自定義包名)。 - JDK:下拉選擇 21 java version ‘21.0.1’(匹配終端
java -version
)。 - Java版本:選擇 21(與JDK版本同步)。
- 名稱:輸入項目名(如
3. 配置Spring Boot依賴(下一步)
- 點擊 下一步(N),進入Spring Initializr依賴選擇界面:
- 必選:
Spring Web
(構建RESTful API)。 - 可選:根據需求添加(如
Spring Data JPA
、MySQL Driver
等,對應數據庫工具鏈)。 - 版本:默認Spring Boot最新穩定版(與JDK 21兼容)。
- 必選:
4. 完成項目創建
- 點擊 創建,IDEA自動生成項目結構:
pom.xml
:Maven依賴配置(包含Spring Boot Parent POM)。src/main/java/com/example/springboot
:主應用類(SpringbootApplication.java
)。src/main/resources
:配置文件(application.properties
或application.yml
)。
三、項目驗證
- 啟動應用:
右鍵主應用類,選擇 運行 ‘SpringbootApplication’,控制臺輸出:
"C:\Program Files\Java\jdk-21\bin\java.exe". ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v3.5.0)2025-06-03T15:53:30.374+08:00 INFO 26000 --- [springboot] [ main] com.example.SpringbootApplication : Starting SpringbootApplication using Java 21.0.1 with PID 26000 (F:\springboot_CSND\springboot\target\classes started by Again in F:\springboot_CSND\springboot)
2025-06-03T15:53:30.376+08:00 INFO 26000 --- [springboot] [ main] com.example.SpringbootApplication : No active profile set, falling back to 1 default profile: "default"
2025-06-03T15:53:31.122+08:00 INFO 26000 --- [springboot] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
2025-06-03T15:53:31.137+08:00 INFO 26000 --- [springboot] [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2025-06-03T15:53:31.138+08:00 INFO 26000 --- [springboot] [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.41]
2025-06-03T15:53:31.199+08:00 INFO 26000 --- [springboot] [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2025-06-03T15:53:31.199+08:00 INFO 26000 --- [springboot] [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 782 ms
2025-06-03T15:53:31.535+08:00 INFO 26000 --- [springboot] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
2025-06-03T15:53:31.540+08:00 INFO 26000 --- [springboot] [ main] com.example.SpringbootApplication : Started SpringbootApplication in 1.609 seconds (process running for 2.327)
CC. Spring Boot 項目包結構搭建:分層架構的規范實現
一、包創建操作(IntelliJ IDEA 環境)
1.定位根包
在項目導航欄中,展開 src/main/java
目錄,找到根包 com.example
(Spring Boot 應用的基礎包路徑)。
2.創建分層包
右鍵點擊 com.example
,依次選擇 New → Package
,分別創建以下四個包(嚴格遵循小寫命名規范
,符合 Java 包命名 conventions):
controller
:處理 HTTP 請求與響應的控制層
dao
:數據訪問層(封裝數據庫 CRUD 操作,如 JPA Repository)
entity
:實體類層(映射數據庫表結構的 POJO)
service
:業務邏輯層(實現核心業務規則與事務管理)
最終包結構如下(與截圖一致,紅色框標注核心分層包):
com.example
├─ controller # 控制層(請求處理)
├─ dao # 數據訪問層(數據庫交互)
├─ entity # 實體層(表映射)
├─ service # 業務邏輯層(事務與業務規則)
└─ SpringbootApplication.java # 應用啟動類

路徑:src/main/java/com/example/entity/User.java
步驟:
- 在
entity
包上右鍵 → New → Java Class - 輸入類名
User
并回車 - 添加以下代碼:
package com.example.entity;public class User {private Integer id;private String name;private String password;private Integer age;private String sex;private String phone;// 無參構造函數public User() {}// 全參構造函數public User(Integer id, String name, String password, Integer age, String sex, String phone) {this.id = id;this.name = name;this.password = password;this.age = age;this.sex = sex;this.phone = phone;}// Getter 和 Setter 方法(按順序添加)public Integer getId() { return id; }public void setId(Integer id) { this.id = id; }public String getName() { return name; }public void setName(String name) { this.name = name; }public String getPassword() { return password; }public void setPassword(String password) { this.password = password; }public Integer getAge() { return age; }public void setAge(Integer age) { this.age = age; }public String getSex() { return sex; }public void setSex(String sex) { this.sex = sex; }public String getPhone() { return phone; }public void setPhone(String phone) { this.phone = phone; }
}
說明:
- 這是一個標準的Java Bean類(POJO)
- 使用封裝特性(private字段+public訪問器)
- 提供了無參和全參構造函數
- 字段設計對應數據庫中的用戶表結構
構造函數
、Getter
和Setter
可以右鍵->生成
里快速生成
2. 創建User控制器(Controller)
路徑:src/main/java/com/example/controller/UserController.java
步驟:
- 在
controller
包上右鍵 → New → Java Class - 輸入類名
UserController
并回車 - 添加以下代碼:
package com.example.controller;import com.example.entity.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("user")
public class UserController {@GetMapping("/start")public String start() {return "這是你的第一個Spring項目工程!已經順利啟動";}@GetMapping("/getUser")public User getUser() {return new User(1, "張三", "123456", 18, "男", "12345678901");}
}
說明:
@RestController
:聲明這是一個RESTful風格的控制器@RequestMapping("user")
:設置基礎請求路徑@GetMapping
:處理HTTP GET請求start()
方法:返回字符串消息,驗證項目啟動getUser()
方法:返回一個User對象實例,測試數據傳輸
3. 驗證功能
啟動應用:
- 右鍵運行
SpringbootApplication
類的main方法 - 查看控制臺日志,確認Tomcat啟動成功(默認端口
8080
)
測試接口:
-
訪問:
http://localhost:8080/user/start
預期返回:這是你的第一個Spring項目工程!已經順利啟動
-
訪問:
http://localhost:8080/user/getUser
預期返回JSON數據:{"id": 1,"name": "張三","password": "123456","age": 18,"sex": "男","phone": "12345678901" }
還可以這樣查看
得到的結果和瀏覽器中是一樣的.
推薦網站: https://json4u.com/ 是一個專門給開發者用的在線JSON工具網站 。它有很多實用功能:
- 數據可視化:能把JSON數據變成圖形或者表格的樣子展示出來,就像把一堆雜亂的東西整理得整整齊齊、清清楚楚,讓你很容易看懂數據的結構 。
- 數據處理:可以把格式亂亂的JSON數據整理得規規矩矩(格式化);也能把JSON數據變得更緊湊(壓縮) ;還能檢查你的JSON數據格式對不對(驗證)。要是你需要把JSON數據變成其他格式,比如XML、CSV、YAML ,它也能幫你一鍵轉換。
- 數據對比:能幫你找出兩份JSON數據有哪些地方不一樣,快速發現差異。
- 其他小功能:還能做Base64編解碼、生成UUID這些開發中會用到的小任務 。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++這個網站用起來很方便,不需要注冊賬號,打開就能用,而且沒有廣告打擾 。
它處理數據都是在你自己的瀏覽器里進行的,不用擔心數據會被偷偷傳到其他地方,比較保護隱私。
EE. 配置數據訪問層:通過 MyBatis、MySQL 驅動及通用 Mapper 建立 Java 應用與 MySQL 數據庫連接與操作能力
修改pom.xml
,添加MyBatis
依賴 添加MySQL
驅動依賴 添加tk.mybatis
依賴,目的的為了支持數據庫訪問功能。這些依賴分別提供了以下功能:
1. MyBatis 集成依賴 (mybatis-spring-boot-starter
)
-
作用:
簡化 MyBatis 與 Spring Boot 的集成,提供 SQL 映射和 ORM 功能,支持通過注解或 XML 配置數據庫操作。 -
你需要它的原因:
- 后續開發中,
UserDao
接口將使用 MyBatis 的@Mapper
和@Select
等注解(如@Select("SELECT * FROM user")
)。 - 服務層(如
UserService
)需要通過 DAO 接口訪問數據庫,而該依賴提供了接口與 SQL 的映射機制。
- 后續開發中,
2. MySQL 驅動依賴 (mysql-connector-j
)
-
作用:
提供 Java 與 MySQL 數據庫的連接功能,是 JDBC 訪問 MySQL 的基礎組件。 -
你需要它的原因:
-
配置文件中已指定 MySQL 的 JDBC 連接 URL:
spring.datasource.url=jdbc:mysql://localhost:3306/springboot
-
缺少該驅動會導致應用啟動時拋出
java.sql.SQLException: No suitable driver found
異常。
-
3. tk.mybatis 通用 Mapper (mapper-spring-boot-starter
)
-
作用:
提供通用 Mapper 功能,基于單表 CRUD 操作自動生成 SQL,減少重復代碼。 -
你需要它的原因:
-
配置文件中已包含 tk.mybatis 的配置:
mapper.mappers=tk.mybatis.mapper.common.Mapper
-
后續開發中,若
UserDao
接口繼承tk.mybatis.mapper.common.Mapper
,可直接獲得單表 CRUD 方法(如selectByPrimaryKey
、insert
等),無需編寫具體 SQL。
-
<!-- 添加MyBatis依賴 添加MySQL驅動依賴 添加tk.mybatis依賴--><!-- 添加MyBatis依賴 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency><!-- 添加MySQL驅動依賴 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><!-- tk.mybatis依賴 --><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>4.2.2</version></dependency>
maven_repository
其實就是maven的倉庫repository
,使用默認的C:\Users\Again\.m2\repository
也可以,從上圖可以看到我這里默認的倉庫路徑C:\Users\Again\.m2\repository
里都是完整的,如果改成這個路徑D:\apache-maven-3.9.9-bin\maven_repository
就會有些插件缺失(上圖紅色波浪線報錯的插件
),需要下載源代碼/或文檔
+新加載所有Maven項目
,也就是如圖
總之,Maven
項目運行時需要在本地倉庫
中找到pom.xml
里聲明的所有依賴(包括插件)
。
Maven遵循"約定優于配置
"的原則,當你在pom.xml
中聲明依賴后:
- 首次構建:Maven會從中央倉庫或配置的遠程倉庫下載依賴到本地倉庫(默認路徑:
~/.m2/repository
) - 后續構建:直接使用本地倉庫的緩存文件,無需重復下載
- 添加依賴后,Maven 會自動下載所需文件到本地倉庫(默認路徑:
~/.m2/repository
)。 - 本地倉庫是必需的:Maven必須在本地找到所有依賴才能編譯和運行項目。
FF.構建數據訪問層與服務層:創建 UserDao 接口與 UserService 類
一、創建 MyBatis 數據訪問接口(UserDao)
文件路徑:com.example.dao.UserDao
功能說明:
- 通過
@Mapper
注解標識為 MyBatis 數據訪問對象(DAO) - 使用
@Select
注解直接編寫 SQL 查詢語句,實現從user
表查詢所有數據 - 返回值為
List<User>
,通過 MyBatis 自動映射數據庫結果到User
實體類
代碼實現:
package com.example.dao;import com.example.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;@Mapper // @Mapper 是 MyBatis 中的一個注解,用于標識一個接口是一個 MyBatis 的數據訪問對象(DAO:Data Access Object數據訪問對象)。它告訴 MyBatis 這個接口中的方法對應數據庫中的某個操作,比如查詢、插入、更新和刪除等。
public interface UserDao {@Select("SELECT * FROM user") // @Select 是 MyBatis 中的一個注解,用于標識一個方法對應數據庫中的某個查詢操作。它告訴 MyBatis 這個方法對應數據庫中的某個查詢操作,比如 SELECT、UPDATE、DELETE 等。List<User> getUser();
}
二、創建服務層組件(UserService)
文件路徑:com.example.service.UserService
功能說明:
- 通過
@Service
注解標識為 Spring 服務層組件,封裝業務邏輯 - 使用
@Autowired
自動注入UserDao
依賴,實現服務層對數據訪問層的調用 - 定義
getUser()
方法,調用UserDao
的查詢功能并返回結果
代碼實現:
package com.example.service;import com.example.dao.UserDao;
import com.example.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service // @Service 是 Spring 框架中的一個注解,用于標識一個類是一個服務層組件。它通常用于在應用程序中定義業務邏輯層,用于處理業務邏輯和數據訪問。
public class UserService {@Autowired // @Autowired 是 Spring 框架中的一個注解,用于自動注入對象。當一個類需要依賴另一個類時,可以使用 @Autowired 來將依賴對象自動注入到該類中。private UserDao userDao;public List<User> getUser() {return userDao.getUser();}
}
三、層間協作邏輯
Controller(控制層) → UserService(服務層) → UserDao(數據訪問層) → MyBatis → MySQL 數據庫
- 服務層作為業務邏輯入口,協調數據訪問層與上層組件的交互
- 數據訪問層通過 MyBatis 實現數據庫操作的封裝,解耦業務邏輯與底層 SQL
四、關鍵注解說明
注解 | 作用場景 | 核心功能 |
---|---|---|
@Mapper | 數據訪問接口(DAO) | 告訴 MyBatis 掃描該接口,生成 SQL 執行代理對象 |
@Select | 數據庫查詢方法 | 直接在接口方法上聲明 SQL 語句,避免編寫 XML 配置文件 |
@Service | 服務層類 | 標識為 Spring 管理的 Bean,納入依賴注入容器 |
@Autowired | 依賴注入 | 自動將 UserDao 實例注入到 UserService 中,實現層間調用 |
GG. 《構建 springboot 數據庫 user 表(Navicat 可視化 + SQL 腳本實現)》
一、前期準備
確保已安裝 Navicat Premium 工具,且本地 MySQL 服務(localhost:3306
)正常運行,可通過 Navicat 測試連接(如最后一張圖中“測試連接”功能)驗證。
二、Navicat 可視化操作流程
1. 連接數據庫
- 打開 Navicat,在“我的連接”找到
localhost_3306
,右鍵選擇打開連接(或雙擊),輸入密碼后建立與 MySQL 服務器的連接。
2. 新建數據庫
- 連接成功后,右鍵
localhost_3306
,選擇新建數據庫。 - 在彈窗中填寫:
- 數據庫名稱:
springboot
- 字符集:
utf8mb4
(支持 emoji 及特殊字符) - 排序規則:
utf8mb4_unicode_ci
(通用排序,適配多語言)
- 數據庫名稱:
- 點擊確定,完成數據庫創建。
3. 創建數據表(可視化方式)
-
選中左側
springboot
數據庫,點擊頂部表 → 新建表,進入設計界面。 -
依次添加字段:
字段名 類型 長度 非空 主鍵 注釋 id
int
- ?? ?? 主鍵 ID name
varchar
255 ? ? 用戶名 password
varchar
255 ? ? 密碼 age
int
- ? ? 年齡 sex
varchar
255 ? ? 性別 phone
varchar
255 ? ? 手機號 -
點擊保存,命名表為
user
,完成表結構創建。
4. 插入測試數據(可視化 + SQL 兩種方式)
方式 1:可視化插入
-
雙擊左側
user
表,進入數據編輯頁,點擊添加數據,手動填入:1, 張三, 123456, 24, 男, 18888888888 2, 李四, 123456, 25, 女, 19900009999
-
點擊保存,完成數據插入。
方式 2:SQL 腳本插入
-
選中
springboot
數據庫,點擊頂部新建查詢,打開 SQL 編輯器。 -
粘貼插入語句:
INSERT INTO `user` VALUES (1, '張三', '123456', 24, '男 ', '18888888888'); INSERT INTO `user` VALUES (2, '李四', '123456', 25, '女', '19900009999');
-
點擊運行,執行腳本插入數據。
三、SQL 腳本完整說明(可直接復用)
以下是創建 user
表及插入數據的完整 SQL 腳本,可通過 Navicat“運行 SQL 文件”或直接在查詢編輯器執行:
/* 功能:創建 springboot 數據庫 user 表并插入測試數據 適用場景:項目初始化、數據遷移
*/ -- 設置字符集(避免中文亂碼)
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; -- 關閉外鍵檢查(建表時可臨時關閉) -- 1. 刪除舊表(若存在,避免重復創建報錯)
DROP TABLE IF EXISTS `user`; -- 2. 創建新表
CREATE TABLE `user` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主鍵ID', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '用戶名', `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '密碼', `age` int NULL DEFAULT NULL COMMENT '年齡', `sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '性別', `phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '手機號', PRIMARY KEY (`id`) USING BTREE -- 主鍵索引,加速查詢
) ENGINE = InnoDB AUTO_INCREMENT = 3 -- 自增起始值 CHARACTER SET = utf8mb4 -- 字符集 COLLATE = utf8mb4_unicode_ci -- 排序規則 COMMENT = '用戶信息表' -- 表注釋 ROW_FORMAT = Dynamic; -- 行存儲格式(適配 InnoDB) -- 3. 插入測試數據
INSERT INTO `user` VALUES (1, '張三', '123456', 24, '男 ', '18888888888');
INSERT INTO `user` VALUES (2, '李四', '123456', 25, '女', '19900009999'); -- 4. 恢復外鍵檢查(建表完成后開啟)
SET FOREIGN_KEY_CHECKS = 1;
四、流程驗證
- 表結構驗證:在 Navicat 中展開
springboot
→表
→user
,查看字段、類型、注釋是否與設計一致。 - 數據驗證:雙擊
user
表,檢查是否存在“張三、李四”兩條測試數據。
五、常見問題處理
-
連接失敗:
- 檢查 MySQL 服務是否啟動(命令行執行
services.msc
,確認MySQL
服務狀態為Running
)。 - 核對 Navicat 連接配置(主機
localhost
、端口3306
、用戶名root
、密碼是否正確)。
- 檢查 MySQL 服務是否啟動(命令行執行
-
建表報錯:
- 若提示“表已存在”,先執行
DROP TABLE IF EXISTS user;
再重試。 - 檢查字段名、類型是否符合 MySQL 語法(如
varchar
需指定長度)。
- 若提示“表已存在”,先執行
-
數據插入失敗:
- 確保字段順序與
INSERT
語句值順序一致(如id
自增時,可省略id
字段,讓數據庫自動賦值)。
- 確保字段順序與
通過以上流程,可完整構建 springboot
數據庫的 user
表并插入測試數據,為 Java 項目(如 Spring Boot)提供基礎數據支撐 。
HH. 《Spring Boot 數據庫與 MyBatis 配置流程說明(application.properties/.yml雙版本) 》
一、配置文件選擇與核心作用
Spring Boot 支持 application.properties
(鍵值對格式)和 application.yml
(YAML 格式)兩種配置文件,核心作用是:
- 數據庫連接配置:指定 MySQL 數據庫地址、賬號密碼、驅動等信息。
- MyBatis 集成配置:告訴 MyBatis 去哪里找 SQL 映射文件(
.xml
)和實體類。 - 通用 Mapper 配置:啟用 tk.mybatis 的通用 CRUD 功能,減少代碼冗余。
二、application.properties
配置詳解
# 應用名稱
spring.application.name=springboot# 數據庫配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=123456# MyBatis配置
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.springboot.entity
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl# 通用Mapper配置
mapper.mappers=tk.mybatis.mapper.common.Mapper
mapper.not-empty=true
mapper.identity=MYSQL# 服務端口配置
server.port=8080
1. 數據庫連接配置
# 數據庫驅動(MySQL 8+ 推薦使用 com.mysql.cj.jdbc.Driver)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 數據庫 URL(包含字符集、時區等參數)
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=true
# 數據庫賬號密碼(根據實際環境修改)
spring.datasource.username=root
spring.datasource.password=123456
參數說明:
serverTimezone=GMT%2b8
:指定時區為北京時間(GMT+8
),避免跨時區時間誤差。allowMultiQueries=true
:允許一條 SQL 執行多個語句(如批量插入)。useSSL=false
:禁用 SSL 連接(開發環境常用,生產環境需評估安全性)。
2. MyBatis 配置
# SQL 映射文件路徑(classpath 表示項目資源目錄)
mybatis.mapper-locations=classpath:mapper/*.xml
# 實體類包路徑(自動掃描該包下的類,無需寫全類名)
mybatis.type-aliases-package=com.example.springboot.entity
# MyBatis 全局配置
mybatis.configuration.map-underscore-to-camel-case=true # 開啟駝峰命名映射(數據庫字段 user_name → 實體類 userName)
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl # 打印 SQL 日志(開發環境使用)
3. 通用 Mapper(tk.mybatis)配置
# 通用 Mapper 接口路徑(所有 DAO 接口需繼承此接口)
mapper.mappers=tk.mybatis.mapper.common.Mapper
# 非空判斷(插入/更新時自動過濾 null 值)
mapper.not-empty=true
# 主鍵自增策略(MySQL 適用)
mapper.identity=MYSQL
4. 服務端口配置
# 應用端口(默認 8080,若沖突可修改為其他端口,如 8090)
server.port=8080
三、application.yml
配置詳解(等價于 properties)
spring:application:name: springboot # 應用名稱datasource:driver-class-name: com.mysql.cj.jdbc.Driver # 數據庫驅動url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=true # 數據庫 URLusername: root # 數據庫賬號password: 123456 # 數據庫密碼
mybatis:mapper-locations: classpath:mapper/*.xml # SQL 映射文件路徑type-aliases-package: com.example.springboot.entity # 實體類包路徑configuration:map-underscore-to-camel-case: true # 駝峰命名映射log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # SQL 日志打印
mapper:mappers:- tk.mybatis.mapper.common.Mapper # 通用 Mapper 接口not-empty: true # 非空判斷identity: MYSQL # 主鍵自增策略
server:port: 8080 # 服務端口
YAML 格式注意事項:
- 縮進嚴格:使用空格縮進(2-4 個空格),禁止使用 Tab 鍵。
- 冒號空格:鍵名后必須加空格再跟值(如
server:
后需有空格)。 - 注釋符號:使用
#
注釋,與 properties 一致。
四、配置生效流程與驗證
1. 配置文件優先級
Spring Boot 會自動讀取以下位置的配置文件(優先級由高到低):
src/main/resources/application.properties/.yml
(項目內默認配置)- 命令行參數(如
--server.port=8090
) - 環境變量
2. 驗證配置是否生效
方式 1:啟動項目查看日志
- 若控制臺打印 SQL 語句(如
==> Preparing: SELECT * FROM user
),說明 MyBatis 配置正確。 - 若出現
JDBC Connection
相關錯誤,檢查數據庫驅動、URL、賬號密碼是否正確。
方式 2:訪問接口測試
- 假設已編寫 Controller 接口(如
/users
),訪問http://localhost:8080/users
,若返回數據庫中的用戶數據(如張三、李四),則配置成功。
五、常見問題與解決方案
1. 數據庫連接失敗
-
現象:啟動時報
java.sql.SQLException: No suitable driver found
- 原因:未添加 MySQL 驅動依賴或驅動類名錯誤(MySQL 8+ 需用
com.mysql.cj.jdbc.Driver
)。 - 解決:在
pom.xml
中添加mysql-connector-java
依賴,并檢查驅動類名是否正確。
- 原因:未添加 MySQL 驅動依賴或驅動類名錯誤(MySQL 8+ 需用
-
現象:
Access denied for user 'root'@'localhost'
- 原因:數據庫賬號或密碼錯誤。
- 解決:核對
application.properties/.yml
中的username
和password
,確保與 MySQL 一致。
2. MyBatis 找不到 SQL 映射文件
- 現象:啟動時報
Invalid bound statement (not found): com.example.dao.UserDao.getUser
- 原因:
mapper-locations
路徑錯誤或 XML 文件未放在指定目錄。 - 解決:
- 確認
mapper
目錄位于src/main/resources
下。 - 檢查
mapper-locations
路徑是否正確(如classpath:mapper/*.xml
)。
- 確認
- 原因:
3. 時區警告(Optional)
- 現象:控制臺輸出
The server time zone value '***' is unrecognized
- 解決:在數據庫 URL 中添加
serverTimezone=GMT%2b8
(已包含在示例配置中)。
- 解決:在數據庫 URL 中添加
六、兩種格式對比與選擇建議
維度 | application.properties | application.yml |
---|---|---|
語法 | 鍵值對(key=value ),結構簡單 | YAML 格式,縮進層級分明,可讀性更強 |
復雜度 | 適合簡單配置或對 YAML 不熟悉的開發者 | 適合復雜層級配置(如嵌套對象) |
兼容性 | 所有 Spring Boot 版本支持 | 需 Spring Boot 1.4+ 版本支持 |
推薦場景 | 快速原型開發、簡單項目 | 復雜項目、需要層級化配置的場景 |
建議:新項目優先使用 application.yml
,享受更清晰的層級結構;若團隊對 YAML 不熟悉,可沿用 properties
。
通過以上配置,Spring Boot 項目即可通過 MyBatis 和 tk.mybatis 實現對 MySQL 數據庫的訪問,后續可繼續開發 Controller 層和前端界面,完成完整的 CRUD 功能。
修改application.properties
文件或者application.yml
文件
application.properties
文件代碼
# 應用名稱
spring.application.name=springboot# 數據庫配
置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=123456# MyBatis配置
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.springboot.entity
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl# 通用Mapper配置
mapper.mappers=tk.mybatis.mapper.common.Mapper
mapper.not-empty=true
mapper.identity=MYSQL# 服務端口配置
server.port=8080
或者application.yml
文件代碼
# 應用名稱
spring:application:name: springboot# 數據庫配置datasource:driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCurl: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=trueusername: rootpassword: 123456# MyBatis配置
mybatis:# mapper.xml文件位置mapper-locations: classpath:mapper/*.xml# 實體類包路徑,根據實際項目結構調整type-aliases-package: com.example.springboot.entityconfiguration:# 開啟駝峰命名轉換map-underscore-to-camel-case: true# 打印SQL語句,開發環境可開啟log-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 通用Mapper配置
mapper:mappers:- tk.mybatis.mapper.common.Mappernot-empty: trueidentity: MYSQL# 服務端口配置
server:port: 8080
II 《UserController
新增用戶查詢接口:實現數據庫數據獲取》
一、修改UserController
代碼
新增內容:
在 UserController
中新增以下代碼,核心目標是通過 HTTP 接口從數據庫查詢用戶數據并返回:
@Autowired // @Autowired 是 Spring 框架中的一個注解,用于自動注入依賴對象。它通常用于在 Spring 容器中獲取已經存在的 bean,并將其注入到當前 bean 中。private UserService userService; // userService是UserService接口的實例對象,通過@Autowired注解注入@GetMapping("/users")public List<User> getAllUsers() {return userService.getUser();}
代碼位置:
位于 com.example.controller.UserController
類中,與 @RestController
和 @RequestMapping("user")
注解同級,作為請求處理的入口。。
二、關鍵注解與代碼邏輯解析
1. @Autowired
注解
- 作用:
通過 Spring 依賴注入機制,將UserService
實例(封裝了數據庫訪問邏輯)注入控制器,使控制器能調用UserService
中的方法操作數據庫。 - 原理:
Spring 通過依賴注入(DI)機制,在控制器實例化時將UserService
的 Bean 注入到userService
變量中,避免手動創建對象,實現層間解耦。 - 關鍵邏輯:
UserService
→UserDao
→MyBatis
→MySQL 數據庫
(服務層調用數據訪問層,數據訪問層通過 MyBatis 執行 SQL 查詢數據庫) - 注意:
- 需確保
UserService
類通過@Service
注解聲明為 Spring Bean,否則注入失敗。 - 若項目未掃描到
UserService
,會拋出NoSuchBeanDefinitionException
異常(需在啟動類中通過@ComponentScan
包含該類所在包)。
- 需確保
2. @GetMapping("/users")
注解
-
作用:
映射 HTTP GET 請求到/users
路徑,結合類上的@RequestMapping("user")
,完整請求路徑為:http://localhost:8080/user/users 。
-
參數:
/users
:資源路徑,對應“查詢用戶列表”操作。public List<User>
:返回值為用戶列表,Spring 自動將其序列化為 JSON 格式(如[User1, User2]
)。
3. 方法邏輯
public List<User> getAllUsers() { return userService.getUser();
}
數據庫查詢觸發流程:
- 客戶端請求:發送 GET 請求到
/user/users
。 - 控制器處理:調用
userService.getUser()
,該方法內部執行以下步驟:- 服務層(
UserService
):調用UserDao
的getUser()
方法。 - 數據訪問層(
UserDao
):通過 MyBatis 執行 SQLSELECT * FROM user
查詢數據庫(代碼見UserDao
中的@Select("SELECT * FROM user")
)。 - MyBatis 交互:將數據庫返回的結果集(
ResultSet
)自動映射為User
實體類對象,封裝成List<User>
。
- 服務層(
- 結果返回:控制器將
List<User>
轉換為 JSON 格式,返回給客戶端,完成從數據庫獲取數據的全流程。
KK. 《用戶數據查詢功能驗證過程》
一、啟動 Spring Boot 項目
(一)操作步驟
在 IntelliJ IDEA 中打開 Spring Boot 項目,定位到帶有 @SpringBootApplication
注解的項目啟動類(通常為 SpringbootApplication.java
)。點擊 IDEA 工具欄中的 Run
按鈕(綠色三角形圖標),或使用快捷鍵 Shift + F10
啟動項目。
(二)預期結果
控制臺輸出項目啟動日志,包含以下關鍵信息:
- 服務端口:如
Tomcat started on port(s): 8080
,表明 Tomcat 服務器已啟動并監聽指定端口。 - MyBatis 日志(若配置了
log-impl
):顯示==> Preparing: SELECT * FROM user
等 SQL 執行相關記錄,說明 MyBatis 配置生效,可操作數據庫。 - 項目啟動成功提示:無數據庫連接失敗、類找不到等異常報錯,確保后續接口驗證可正常進行。
二、通過瀏覽器驗證接口功能
(一)操作步驟
打開瀏覽器(如 Chrome、Firefox 等),在地址欄輸入接口 URL:
http://localhost:8080/user/users
說明:
localhost
:代表本地服務器,若項目部署在遠程服務器,需替換為對應服務器 IP。8080
:項目端口,需與application.properties
或application.yml
中配置的server.port
保持一致。user/users
:接口路徑,由UserController
類上的@RequestMapping("user")
注解和方法上的@GetMapping("/users")
注解組合而成。
(二)預期結果
- 響應數據:瀏覽器頁面顯示 JSON 格式的用戶數據,內容與數據庫
user
表中的記錄一致。示例響應如下:
[ { "id": 1, "name": "張三", "password": "123456", "age": 24, "sex": "男 ", "phone": "18888888888" }, { "id": 2, "name": "李四", "password": "123456", "age": 25, "sex": "女", "phone": "19900009999" }
]
- 響應狀態碼:為
200 OK
,可通過瀏覽器開發者工具查看。按F12
打開控制臺,切換到Network
標簽頁,刷新頁面后,在請求列表中找到http://localhost:8080/user/users
對應的請求,其“狀態”列會顯示200
,代表請求成功。
三、通過 IDEA 內置 HTTP 客戶端驗證(generated-requests.http
)
(一)功能背景
IDEA 提供內置 HTTP 客戶端工具,可直接在 IDE 內發送 HTTP 請求、查看響應,無需依賴外部工具(如瀏覽器、Postman )。“在 HTTP 客戶端中打開” 功能會自動生成對應接口的請求模板到 generated-requests.http
文件,簡化請求編寫流程。
(二)操作與驗證流程
- 觸發 “在 HTTP 客戶端中打開”
在UserController
的@GetMapping
注解方法旁(如getAllUsers
方法 ),點擊出現的 “在 HTTP 客戶端中打開” 提示。IDEA 會自動創建/打開generated-requests.http
文件,并生成對應接口的請求模板,格式如下:
GET http://localhost:8080/user/users
作用:快速生成請求 URL,避免手動輸入,降低拼寫錯誤概率。
- 發送請求與查看響應
打開generated-requests.http
文件,點擊請求模板左側的綠色運行按鈕(三角形圖標 )發送 GET 請求。發送后,IDEA 底部會彈出 “服務” 面板(可通過Alt + 8
喚起 ),展開 “HTTP 請求” 節點:
- 請求記錄:能看到
generated-requests
的請求記錄,狀態顯示為200
,代表請求成功。 - 詳細響應:點擊該請求記錄,右側會展示:
- 響應體:直接顯示 JSON 格式的用戶數據,與瀏覽器訪問結果一致,包含數據庫中張三、李四等用戶信息列表。
- 響應頭:可查看
Content-Type
(通常為application/json
,說明返回 JSON 數據 )、Status Code
(狀態碼200
)等信息,確認接口通信正常。
- 與其他驗證方式對比優勢
- 無需切換工具:在 IDE 內即可完成請求發送、響應查看,無需在瀏覽器、Postman 等工具間來回切換,提升開發效率。
- 自動關聯代碼:通過代碼旁提示生成請求,請求 URL 與代碼路由實時同步。若修改代碼中的
@RequestMapping
等注解,再次觸發 “在 HTTP 客戶端中打開” 可更新請求模板,減少手動維護請求 URL 的成本。 - 集成日志與調試:結合 IDEA 控制臺日志(如 MyBatis 的 SQL 執行日志 ),可在一個界面同時分析請求流程、數據庫操作、響應結果,便于定位問題(如 SQL 執行異常時,能快速關聯請求報錯與日志信息 )。
四、驗證關鍵點與異常處理
(一)關鍵點驗證
- 數據庫連通性:接口能返回數據,說明項目已成功連接到 MySQL 數據庫,并執行了
SELECT * FROM user
查詢,數據庫訪問鏈路通暢。 - MyBatis 映射正確性:數據庫字段(如
id
、name
)需正確映射到User
實體類屬性,無字段缺失或類型錯誤(如年齡age
應顯示為數字,而非字符串 ),保證數據格式符合預期。 - 接口路徑正確性:路徑
user/users
需正確匹配控制器中的路由配置,若訪問時返回404 Not Found
,則說明路徑配置可能有誤,需確認控制器類的@RequestMapping("user")
注解是否正確。
(二)異常場景處理
- 端口沖突:若啟動項目時提示
Port 8080 is already in use
,需修改application.properties
或application.yml
中的server.port
為其他端口(如8090
),重新啟動項目。 - 數據庫連接失敗
- 控制臺報錯
Access denied for user 'root'@'localhost'
:檢查application.properties
或application.yml
中數據庫賬號密碼配置(spring.datasource.username/password
),確保與實際數據庫賬號密碼一致。 - 報錯
No suitable driver found
:檢查pom.xml
文件,確認已添加 MySQL 驅動依賴(mysql-connector-java
),保證項目能連接數據庫。
- 控制臺報錯
- 接口路徑錯誤:若輸入
http://localhost:8080/users
(缺少user
前綴 )返回404
,需確認控制器類的@RequestMapping("user")
注解配置是否正確,保證接口路徑組合無誤。 - 請求無響應/報錯(IDE 內置 HTTP 客戶端)
- 檢查項目是否啟動:確認 Spring Boot 應用已通過
Run
按鈕啟動,且控制臺無啟動報錯。若項目未啟動,請求會因連接不到服務端而失敗。 - 核對請求 URL:確認
generated-requests.http
中的 URL 與實際服務端口、路徑一致。若修改過server.port
或控制器注解路徑,需重新觸發 “在 HTTP 客戶端中打開” 更新模板。
- 檢查項目是否啟動:確認 Spring Boot 應用已通過
- 響應亂碼或格式異常
- 檢查編碼配置:確保
application.properties
/application.yml
中配置了字符集(如spring.http.encoding.charset = UTF-8
),且數據庫連接 URL 中設置了useUnicode = true&characterEncoding = utf-8
,避免因編碼不一致導致響應亂碼。 - 確認實體類映射:若響應 JSON 字段缺失或類型錯誤,檢查
User
實體類字段是否與數據庫表字段正確映射(如采用駝峰命名、通過@Column
注解配置 ),確保 MyBatis 能正確轉換結果集。
- 檢查編碼配置:確保
五、驗證工具擴展(非瀏覽器、非 IDE 內置方式 )
(一)Postman 驗證(推薦)
- 操作步驟:打開 Postman,選擇
GET
請求,輸入 URLhttp://localhost:8080/user/users
,點擊Send
發送請求。 - 優勢:清晰顯示響應狀態碼、響應頭和響應體;支持保存請求歷史,方便后續重復測試與接口管理。
(二)curl 命令驗證(命令行)
- 操作步驟:在終端輸入以下命令:
curl http://localhost:8080/user/users
- 預期結果:終端輸出與瀏覽器一致的 JSON 數據,可快速在命令行環境驗證接口功能。
六、總結
通過以上多種方式(瀏覽器、IDEA 內置 HTTP 客戶端、Postman、curl ),從不同維度驗證了 UserController
中 /user/users
接口的功能正確性:
- 項目啟動正常:Spring Boot 應用成功啟動,Tomcat 服務器監聽指定端口,各依賴組件(如 MyBatis )配置生效。
- 接口響應正確:無論是瀏覽器、IDE 內置工具還是外部工具(Postman、curl ),都能正確獲取數據庫中的用戶數據,返回 JSON 格式內容,且響應狀態碼為
200
,表明接口通信與數據查詢正常。 - 依賴鏈路完整:從控制器 → 服務層 → 數據訪問層 → 數據庫的全流程無異常,各層通過依賴注入、注解配置等方式協作順暢,保障了數據庫查詢功能的可用性,為后續用戶新增、修改、刪除等接口開發奠定可靠基礎。