MySQL整合Spring时,Spring JDBC是简化数据库操作的核心组件,它封装了原生JDBC的冗余操作,让开发者可以更专注于业务逻辑的实现,不需要手动处理连接的创建、释放以及异常捕获等繁琐工作。

环境准备
首先需要在项目中引入相关的依赖,如果使用Maven构建项目,需要在pom.xml中添加以下依赖:
<dependencies>
<!-- Spring核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.30</version>
</dependency>
<!-- Spring JDBC依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.30</version>
</dependency>
<!-- MySQL驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
核心配置
配置数据源
Spring JDBC需要依赖DataSource来获取数据库连接,这里使用Spring自带的内置数据源作为示例,在Spring的配置文件中添加数据源配置:
<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
配置JdbcTemplate
JdbcTemplate是Spring JDBC的核心操作类,它提供了丰富的数据库操作方法,需要将数据源注入到JdbcTemplate中:
<!-- 配置JdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
基础操作示例
创建实体类
首先创建一个对应的数据库实体类,假设数据库中有一张user表,字段包含id、username、age:
public class User {
private Integer id;
private String username;
private Integer age;
// 省略getter、setter方法
// 省略toString方法
}
新增操作
使用JdbcTemplate的update方法执行新增操作,该方法支持传入SQL语句和对应的参数:
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class JdbcDemo {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
// 新增用户
String sql = "insert into user(username, age) values(?, ?)";
int rows = jdbcTemplate.update(sql, "张三", 25);
System.out.println("新增影响行数:" + rows);
}
}
查询操作
查询单条数据可以使用queryForObject方法,需要传入RowMapper来映射结果集到实体类:
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class JdbcQueryDemo {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
// 查询单条数据
String singleSql = "select * from user where id = ?";
User user = jdbcTemplate.queryForObject(singleSql, new BeanPropertyRowMapper<>(User.class), 1);
System.out.println("单条用户数据:" + user);
// 查询多条数据
String listSql = "select * from user";
List<User> userList = jdbcTemplate.query(listSql, new BeanPropertyRowMapper<>(User.class));
System.out.println("用户列表:" + userList);
}
}
修改和删除操作
修改和删除操作同样使用update方法,只需要传入对应的SQL和参数即可:
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class JdbcUpdateDeleteDemo {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
// 修改操作
String updateSql = "update user set age = ? where id = ?";
int updateRows = jdbcTemplate.update(updateSql, 26, 1);
System.out.println("修改影响行数:" + updateRows);
// 删除操作
String deleteSql = "delete from user where id = ?";
int deleteRows = jdbcTemplate.update(deleteSql, 1);
System.out.println("删除影响行数:" + deleteRows);
}
}
事务管理配置
Spring JDBC支持声明式事务管理,只需要在配置文件中添加事务管理器和事务注解驱动即可:
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 开启事务注解驱动 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
之后在需要事务管理的方法上添加@Transactional注解即可,如果方法执行过程中抛出异常,事务会自动回滚:
import org.springframework.transaction.annotation.Transactional;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Transactional
public void batchAddUser() {
String sql = "insert into user(username, age) values(?, ?)";
jdbcTemplate.update(sql, "李四", 22);
// 模拟异常,触发事务回滚
int i = 1 / 0;
jdbcTemplate.update(sql, "王五", 23);
}
}
注意事项
- MySQL的url中需要指定时区参数,否则可能会出现连接异常
- 使用BeanPropertyRowMapper时,实体类的属性名需要和数据库字段名一致,或者遵循驼峰命名映射规则
- 如果项目中需要更强大的数据源,可以替换内置数据源为Druid、HikariCP等第三方数据源,配置方式类似
- 事务管理默认只对运行时异常进行回滚,如果需要回滚其他类型的异常,可以在
@Transactional注解中指定rollbackFor属性
Spring_JDBCMySQLDataSourceJdbcTemplate事务管理修改时间:2026-07-11 07:48:33