關于學習Spring框架時重構DAO層時,遇到的QueryRunner構造方法的問題,回憶MySQL中DBUtils部分
1. 空參構造方法?new QueryRunner()
特點:
-
不綁定數據源:
QueryRunner
?實例內部沒有?DataSource
,因此無法自動獲取連接。 -
手動管理連接:調用者必須自行獲取?
Connection
,并在執行數據庫操作時顯式傳入。
底層機制:
-
當調用?
query()
?或?update()
?方法時,QueryRunner
?發現自身沒有?DataSource
,會強制要求調用者提供?Connection
。
2. 帶數據源的構造方法?new QueryRunner(DataSource ds)
特點:
-
綁定數據源:
QueryRunner
?實例持有?DataSource
,可自動管理連接的獲取和釋放。 -
自動管理連接:每次操作時,
QueryRunner
?會從?DataSource
?獲取新連接,操作完成后自動關閉連接。
底層機制:
-
當調用?
query()
?或?update()
?方法時,QueryRunner
?通過?DataSource.getConnection()
?獲取連接,并在?finally
?塊中關閉連接。
關鍵對比
特性 | 空參構造?new QueryRunner() | 帶數據源構造?new QueryRunner(DataSource ds) |
---|---|---|
連接來源 | 必須由調用者顯式傳入?Connection | 自動從?DataSource ?獲取新連接 |
連接管理 | 手動控制(開啟、提交、回滾、關閉) | 自動獲取和關閉連接 |
事務支持 | ? 支持(同一連接多次操作) | ? 不支持(每次操作獨立連接) |
資源泄漏風險 | 需謹慎處理?Connection ?關閉 | 無風險(自動關閉) |
代碼復雜度 | 較高(需自行管理連接) | 較低(簡化代碼) |
總結
-
空參構造 + 顯式傳?
Connection的
?QueryRunner
?適用于需要手動控制事務的場景,但需自行管理連接。 -
帶數據源構造的?
QueryRunner
?適用于無事務需求的簡單操作,自動化程度更高。