DBUtils中QueryRunner(空参,传数据源)构造方法的区别及应用场景

embedded/2025/2/3 4:36:00/

关于学习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 适用于无事务需求的简单操作,自动化程度更高。


http://www.ppmy.cn/embedded/159083.html

相关文章

nodejs:express + js-mdict 网页查询英汉词典

向 DeepSeek R1 提问: 我想写一个Web 前端网页,后台用 nodejs js-mdict, 实现在线查询英语单词 1. 项目结构 首先,创建一个项目目录,结构如下: mydict-app/ ├── public/ │ ├── index.html │ ├── st…

【踩坑日常,已解决】彻底修改IDEA项目的JDK版本,8改为17

三处修改彻底解决IDEA中JDK版本不对问题(8改为17) 文章目录 三处修改彻底解决IDEA中JDK版本不对问题(8改为17)第一处第二处第三处 第一处 setting -> Build, Execution, Deployment -> Java Compiler -> Target bytecod…

【黑龙江乡镇界】面图层arcgis数据shp格式乡镇名称和编码wgs84无偏移内容测评

本文将详细讲解与“最新黑龙江乡镇界面图层arcgis数据shp格式乡镇名称和编码wgs84无偏移”相关的知识点,包括GIS基础、ArcGIS软件、SHP文件格式、WGS84坐标系统以及乡镇行政数据的重要性。 GIS基础 GIS(Geographic Information System,地理信…

Java泛型深度解析(JDK23)

第一章 泛型革命 1.1 类型安全的进化史 前泛型时代的类型转换隐患 代码的血泪史(Java 1.4版示例): List rawList new ArrayList(); rawList.add("Java"); rawList.add(Integer.valueOf(42)); // 编译通过// 灾难在运行时爆发…

北京大学与智元机器人联合实验室发布OmniManip:显著提升机器人3D操作能力

近年来视觉语⾔基础模型(Vision Language Models, VLMs)在多模态理解和⾼层次常识推理上⼤放异彩,如何将其应⽤于机器⼈以实现通⽤操作是具身智能领域的⼀个核⼼问题。这⼀⽬标的实现受两⼤关键挑战制约:1. VLM 缺少精确的 3D 理解…

MySQL基础-多表查询

多表查询-多表关系 多表查询-概述 例如执行下行sql语句就会出现笛卡尔积: select *from emp,dept; --消除笛卡尔积 select * from emp,dept where emp.dept_id dept.id; 多表查询-查询分类 多表查询-连接查询-内连接 --内连接演示 --1.查询每一个员工的姓名,及关…

8.[前端开发-CSS]Day08-图形-字体-字体图标-元素定位

一、额外知识补充 1 border图形 边框的形状 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport"…

3b1b线性代数基础

零、写在前面 3b1b之前没认真看&#xff0c;闲了整理整理。 一、向量 学习物理的时候&#xff0c;向量是空间中的箭头。由其方向和长度决定。 学习数据结构的时候&#xff0c;向量是有序的数字列表。向量的每一维度有着不同含义。 线性代数中&#xff0c;我们通常认为**向量…