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 進行數據庫操作,避免冗余代碼,同時保證資源安全和事務一致性。