重溫 JavaWeb 基礎,從資料庫連接池到 DButils,再到 MVC 三層架構實戰,這段過程讓我對「程式是構造出來的,不是編出來的」有了具體體悟。本文記錄學習心得與架構理解。
// 方式一:程式碼配置
BasicDataSource source = new BasicDataSource();
source.setDriverClassName("com.mysql.jdbc.Driver");
source.setUrl("jdbc:mysql:///day11");
source.setUsername("root");
source.setPassword("root");
// 方式二:屬性檔配置(推薦)
Properties prop = new Properties();
prop.load(new FileReader("dbcp.properties"));
BasicDataSourceFactory factory = new BasicDataSourceFactory();
DataSource source = factory.createDataSource(prop);
dbcp.properties 關鍵配置:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///day11
username=root
password=root
initialSize=10
maxActive=50
maxIdle=20
minIdle=5
maxWait=60000
// 方式一:程式碼配置
ComboPooledDataSource source = new ComboPooledDataSource();
source.setDriverClass("com.mysql.jdbc.Driver");
source.setJdbcUrl("jdbc:mysql:///day11");
source.setUser("root");
source.setPassword("root");
// 方式二:c3p0-config.xml 配置
// 放在 classpath 下
QueryRunner 核心方法:
update():增刪改,簡單直接query() + ResultSetHandler:查詢,策略模式處理結果集常用 ResultSetHandler:
| 處理器 | 用途 | 回傳型別 |
|---|---|---|
| BeanHandler | 單筆映射為 JavaBean | T |
| BeanListHandler | 多筆映射為 JavaBean 列表 | List<T> |
| MapHandler | 單筆映射為 Map | Map<String, Object> |
| MapListHandler | 多筆映射為 Map 列表 | List<Map> |
| ScalarHandler | 單一值(count、max 等) | Object |
泛型設計讓結果處理極具彈性,封裝思想體現得淋漓盡致:重複邏輯下沉框架,業務層專注核心邏輯。
角色比喻:餐廳系統
流程:用戶(你)餓了 → 總管接收需求 → 傭人買菜做飯 → 總管端上桌子 → 用戶享用
相對獨立的意義:
基於 MVC 擴展:
| 層級 | 組件 | 職責 | 對應 MVC |
|---|---|---|---|
| Web 層 | JSP + Servlet | 請求接收、響應渲染、流程控制 | V + C |
| Service 層 | Service 介面/實作 | 核心業務邏輯、交易管理 | M(業務邏輯) |
| DAO 層 | DAO 介面/實作 | 資料存取、SQL 執行 | M(資料存取) |
分層演進邏輯:
功能:客戶增刪改查、分頁、條件搜尋
架構落地:
「程式是構造出來的」——結構與思維是骨架,細節是血肉。掌握 MVC 與三層架構,不只是學會一種技術,更是建立了解決複雜問題的系統性思維框架。