Spring JDBC 的开发步骤(注解方式)
Spring JDBC 的开发步骤主要包括以下关键环节,结合代码示例说明如下:
1. 添加依赖
在 pom.xml
中引入 Spring JDBC 和数据库驱动依赖(以 HikariCP 连接池和 MySQL 为例):
<!-- Spring JDBC -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.23</version>
</dependency><!-- 数据库驱动 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
</dependency><!-- 连接池(可选,推荐 HikariCP) -->
<dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>4.0.3</version>
</dependency>
2. 配置数据源
通过 Java Config 配置数据源(推荐)或 XML。
Java Config 示例:
@Configuration
public class DataSourceConfig {@Beanpublic DataSource dataSource() {HikariDataSource dataSource = new HikariDataSource();dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/testdb");dataSource.setUsername("root");dataSource.setPassword("password");dataSource.setMaximumPoolSize(10);return dataSource;}
}
3. 创建 JdbcTemplate 实例
将 DataSource
注入到 JdbcTemplate
中:
@Configuration
public class JdbcConfig {@Autowiredprivate DataSource dataSource;@Beanpublic JdbcTemplate jdbcTemplate() {return new JdbcTemplate(dataSource);}
}
4. 编写 DAO 层
使用 JdbcTemplate
执行 SQL 操作,常用方法包括:
update()
: 执行增删改操作query()
: 查询数据(配合RowMapper
或ResultSetExtractor
)queryForObject()
: 查询单条记录
示例:UserDao
@Repository
public class UserDao {@Autowiredprivate JdbcTemplate jdbcTemplate;// 插入用户public void insertUser(User user) {String sql = "INSERT INTO users (name, email) VALUES (?, ?)";jdbcTemplate.update(sql, user.getName(), user.getEmail());}// 查询所有用户public List<User> findAllUsers() {String sql = "SELECT * FROM users";return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));}// 根据ID查询用户public User findUserById(int id) {String sql = "SELECT * FROM users WHERE id = ?";return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(User.class));}
}
5. 异常处理
Spring JDBC 将 SQLException
转换为 DataAccessException
,可通过 @ExceptionHandler
统一处理:
@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(DataAccessException.class)public ResponseEntity<String> handleDataAccessException(DataAccessException ex) {return ResponseEntity.status(500).body("数据库操作失败: " + ex.getMessage());}
}
6. 事务管理(可选)
在 Service 层使用 @Transactional
管理事务:
@Service
public class UserService {@Autowiredprivate UserDao userDao;@Transactionalpublic void createUser(User user) {userDao.insertUser(user);// 其他数据库操作(事务会回滚)}
}
7. 测试 DAO 层
使用 Spring Test 进行单元测试:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {DataSourceConfig.class, JdbcConfig.class})
public class UserDaoTest {@Autowiredprivate UserDao userDao;@Testpublic void testFindAllUsers() {List<User> users = userDao.findAllUsers();Assert.assertNotNull(users);}
}
补充说明
-
简化配置(Spring Boot):
在 Spring Boot 中,只需添加spring-boot-starter-jdbc
依赖,自动配置HikariDataSource
和JdbcTemplate
,无需手动配置数据源。 -
参数绑定:
使用?
占位符防止 SQL 注入,JdbcTemplate
自动处理参数预编译。 -
结果映射:
BeanPropertyRowMapper
自动将结果集映射到 POJO,需确保字段名与类属性一致。
通过以上步骤,即可高效使用 Spring JDBC 进行数据库操作,避免冗余代码,同时保证资源安全和事务一致性。