JdbcTemplate通过模板方法模式封装数据库操作固定流程,将SQL执行和结果映射等可变逻辑交由RowMapper等回调接口实现。其query、update等方法统一管理连接获取、语句创建、异常转换与资源释放,开发者只需专注SQL编写与业务映射,无需处理try-catch-finally或手动关闭资源。

模板方法模式在 Spring JdbcTemplate 中的核心应用,是把数据库操作中固定不变的流程(获取连接、创建语句、异常处理、资源释放)封装为统一骨架,而将可变部分——比如 SQL 执行逻辑、结果集如何映射——交给回调接口实现。
统一的执行流程骨架
JdbcTemplate 并没有要求你继承它,而是通过“模板方法 + 回调”方式复用流程。它的 query、update、execute 等方法内部都遵循同一套流程:
- 从 DataSource 获取 Connection
- 根据 SQL 创建 PreparedStatement 或 Statement
- 设置参数(如有)
- 执行 SQL 操作
- 对 ResultSet 进行处理(由你提供 RowMapper 等回调)
- 自动关闭 Statement 和 ResultSet(Connection 通常由 Spring 管理)
可变逻辑交给回调接口
真正体现“延迟到子类实现”的部分,被抽象成一组回调接口,而不是靠继承:
- RowMapper<T>:负责把 ResultSet 的一行转成一个对象(替代手动 rs.next() + setXXX())
- ResultSetExtractor<T>:适合需要遍历整个结果集并聚合返回单个值的场景(如 count)
- PreparedStatementSetter:封装参数设置逻辑,避免在调用处写 setObject(i+1, param) 循环
- ConnectionCallback / StatementCallback:更底层的定制,直接操作 Connection 或 Statement
不继承也能复用,是模板方法的进化形态
传统模板方法依赖抽象类 + 子类继承,而 JdbcTemplate 采用“参数化回调”,本质上仍是模板方法思想——算法骨架固定,变化点外置。这种方式更轻量、更灵活,也更符合 Spring “面向接口、解耦协作”的设计哲学。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 你不用写 try-catch-finally 块,也不用操心 Connection 是否关闭
- 只需专注业务:写 SQL、定义映射规则、处理参数
- 异常被自动转换为 Spring 的 DataAccessException 体系,统一处理
一个典型例子对比
原生 JDBC 查用户要写十几行样板代码;用 JdbcTemplate 只需一行:
User user = jdbcTemplate.queryForObject("SELECT id, username, email FROM users WHERE id = ?",
new Object[]{userId},
new BeanPropertyRowMapper(User.class)
);
其中 queryForObject 就是模板方法,BeanPropertyRowMapper 就是实现了 RowMapper 接口的“具体步骤”。

















