如何使用 Spring Boot 3.3 和 JdbcTemplate 操作 MySQL 數(shù)據(jù)庫

在現(xiàn)代的 Java 應用開發(fā)中,Spring Boot 提供了強大的工具來簡化數(shù)據(jù)庫操作。JdbcTemplate 是 Spring 提供的一個核心類,用于簡化 JDBC 操作,減少樣板代碼。本文將介紹如何在 Spring Boot 3.3 項目中使用 JdbcTemplate 來操作 MySQL 數(shù)據(jù)庫,并通過類圖展示關鍵類之間的關系。
1. 項目依賴配置
在 Spring Boot 3.3 項目中,使用 JdbcTemplate 操作 MySQL 數(shù)據(jù)庫需要以下依賴:
spring-boot-starter-jdbc:提供 JdbcTemplate 和其他 JDBC 相關功能。
mysql-connector-j:MySQL 的 JDBC 驅動,用于連接 MySQL 數(shù)據(jù)庫。
在 pom.xml 文件中添加以下依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>2. 數(shù)據(jù)庫配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC
username: your_username
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver3. 關鍵類及其關系

3.1 實體類(User)
實體類 User 對應數(shù)據(jù)庫表 users。它包含字段 id、name 和 email,以及相應的 getter 和 setter 方法。
public class User {
private Long id;
private String name;
private String email;
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}3.2 DAO 類(UserDao)
DAO 類 UserDao 封裝了與數(shù)據(jù)庫表相關的操作。它注入了 JdbcTemplate 對象,并通過它執(zhí)行 SQL 語句。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public User findUserById(Long id) {
String sql = "SELECT * FROM users WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new Object[]{id}, new UserRowMapper());
}
public List<User> findAllUsers() {
String sql = "SELECT * FROM users";
return jdbcTemplate.query(sql, new UserRowMapper());
}
public int insertUser(User user) {
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
return jdbcTemplate.update(sql, user.getName(), user.getEmail());
}
public int updateUser(User user) {
String sql = "UPDATE users SET name = ?, email = ? WHERE id = ?";
return jdbcTemplate.update(sql, user.getName(), user.getEmail(), user.getId());
}
public int deleteUser(Long id) {
String sql = "DELETE FROM users WHERE id = ?";
return jdbcTemplate.update(sql, id);
}
}3.3 RowMapper 接口
RowMapper 是一個接口,用于將 ResultSet 中的每一行數(shù)據(jù)映射為一個對象。UserRowMapper 是 RowMapper 的具體實現(xiàn),用于將查詢結果映射為 User 對象。
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getLong("id"));
user.setName(rs.getString("name"));
user.setEmail(rs.getString("email"));
return user;
}
}4. 注意事項
4.1 SQL 注入風險
確保使用參數(shù)化查詢,避免直接拼接 SQL 語句,以防止 SQL 注入攻擊。
4.2 異常處理
捕獲并處理可能的 DataAccessException,這是 JdbcTemplate 拋出的異常。
4.3 資源管理
JdbcTemplate 會自動管理數(shù)據(jù)庫連接,無需手動關閉 Connection、Statement 或 ResultSet。
4.4 性能優(yōu)化
對于復雜的查詢,可以考慮使用 PreparedStatement 或 PreparedStatementSetter 來提高性能。
5. 總結
本文介紹了如何在 Spring Boot 3.3 項目中使用 JdbcTemplate 操作 MySQL 數(shù)據(jù)庫。我們定義了實體類 User,創(chuàng)建了 DAO 類 UserDao,并使用 JdbcTemplate 執(zhí)行數(shù)據(jù)庫操作。通過 RowMapper 接口,我們將查詢結果映射為 User 對象。最后,我們通過類圖展示了關鍵類之間的關系。
希望本文對你有所幫助!如果有任何問題或建議,歡迎隨時留言。
PS:以我之思,借AI之力
到此這篇關于如何使用 Spring Boot 3.3 和 JdbcTemplate 操作 MySQL 數(shù)據(jù)庫的文章就介紹到這了,更多相關Spring Boot JdbcTemplate操作mysql內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- MySQL CTE (Common Table Expressions)示例全解析
- MySQL CTE 通用表達式詳解
- MySQL中使用CTE獲取時間段數(shù)據(jù)的技巧分享
- MySQL數(shù)據(jù)庫中遇到no?database?selected問題解決辦法
- Mysql8公用表表達式CTE詳解
- MySQL8.0之CTE(公用表表達式)的使用
- 解決mysql報錯:Data?source?rejected?establishment?of?connection,?message?from?server:?\"Too?many?connectio
- MySQL數(shù)據(jù)庫之字符集?character
- mysql8 公用表表達式CTE的使用方法實例分析
- MySQL中普通CTE和遞歸CTE的順序問題小結
相關文章
為什么Spring官方推薦的@Transational還能導致生產事故
在Spring中進行事務管理非常簡單,只需要在方法上加上注解@Transactional,那么為什么Spring官方推薦的@Transational還能導致生產事故,本文就詳細的介紹一下2021-11-11
Java編程實現(xiàn)統(tǒng)計數(shù)組中各元素出現(xiàn)次數(shù)的方法
這篇文章主要介紹了Java編程實現(xiàn)統(tǒng)計數(shù)組中各元素出現(xiàn)次數(shù)的方法,涉及java針對數(shù)組的遍歷、比較、運算等相關操作技巧,需要的朋友可以參考下2017-07-07
SpringBoot中spring.factories文件的作用及讀取過程
SpringBoot通過spring.factories文件實現(xiàn)自動配置和擴展機制,該文件位于類路徑下的META-INF目錄中,鍵是接口或抽象類的全限定名,值是實現(xiàn)類的全限定名列表,SpringFactoriesLoader類負責讀取和解析spring.factories文件,獲取指定工廠類型的實現(xiàn)類列表2025-11-11

