Spring Boot 中使用 JdbcTemplate 操作数据库的核心是“自动配置 + 简单注入 + 直接调用”,需添加 spring-boot-starter-jdbc 和数据库驱动依赖,并在 application.properties 中配置数据源;JdbcTemplate 作为自动配置 Bean 可直接注入,支持增删改查及多种结果映射方式,配合 @Transactional 实现事务管理。

Spring Boot 中使用 JdbcTemplate 操作关系型数据库,核心是“自动配置 + 简单注入 + 直接调用”。它不依赖 XML 或复杂映射,适合轻量级、SQL 明确、对性能和可控性有要求的场景。
基础依赖与数据源配置
只需两步即可启用 JdbcTemplate:
- 在 pom.xml 中添加 starter 依赖(Spring Boot 自动装配 JdbcTemplate 所必需):
<dependency><br> <groupId>org.springframework.boot</groupId><br> <artifactId>spring-boot-starter-jdbc</artifactId><br> </dependency>
同时引入对应数据库驱动,如 MySQL:<dependency><br> <groupId>mysql</groupId><br> <artifactId>mysql-connector-java</artifactId><br> <scope>runtime</scope><br> </dependency> - 在 application.properties(或 yml)中配置数据源参数:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=falsespring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
(Spring Boot 2.4+ 默认使用 HikariCP 连接池,无需额外配置即可生效)
注入并使用 JdbcTemplate
JdbcTemplate 已由 Spring Boot 自动配置为 Bean,可直接注入使用:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 在 DAO 或 Service 类中通过
@Autowired或构造器注入:@Repository<br> public class StudentDao {<br> private final JdbcTemplate jdbcTemplate;<br> public StudentDao(JdbcTemplate jdbcTemplate) {<br> this.jdbcTemplate = jdbcTemplate;<br> }<br> } - 常用操作示例:
• 插入:jdbcTemplate.update("INSERT INTO student(name, age) VALUES(?, ?)", "张三", 20);
• 查询单条:Student s = jdbcTemplate.queryForObject("SELECT * FROM student WHERE id = ?", new BeanPropertyRowMapper(Student.class), 1);
• 查询列表:List<Student> list = jdbcTemplate.query("SELECT * FROM student", new BeanPropertyRowMapper<>(Student.class));
• 删除/更新:jdbcTemplate.update("DELETE FROM student WHERE id = ?", 1);
查询结果映射技巧
避免手动逐字段赋值,推荐以下方式处理结果集:
-
BeanPropertyRowMapper:要求数据库列名与 Java 属性名一致(支持下划线转驼峰,如
user_name→userName),且实体类需有无参构造器; -
RowMapper 实现类:适用于列名与属性名不匹配、需定制逻辑的场景,例如:
new RowMapper<Student>() {<br> public Student mapRow(ResultSet rs, int rowNum) throws SQLException {<br> return new Student(rs.getInt("id"), rs.getString("name"));<br> }<br> } -
queryForList / queryForObject 基础类型:如
jdbcTemplate.queryForObject("SELECT COUNT(*) FROM student", Integer.class)直接获取标量值。
进阶要点提醒
实际开发中注意几个关键细节:
- 实体类建议实现
Serializable,尤其在集群或缓存场景下避免反序列化异常; - SQL 中含动态条件时,优先用
NamedParameterJdbcTemplate(支持:name占位符),比问号更易读、可复用; - 批量操作用
batchUpdate,传入Object[][]或BatchPreparedStatementSetter提升效率; - 事务控制默认由
@Transactional管理,JdbcTemplate 本身不开启事务,需配合声明式事务使用。

















