DBUtils中QueryRunner(空参,传数据源)构造方法的区别及应用场景
关于学习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
适用于无事务需求的简单操作,自动化程度更高。