使用 IntelliJ IDEA + Spring JdbcTemplate 操作 MySQL 完全指南
一、開發環境搭建(基于 IDEA)
1. 創建 Spring Boot 項目
- 打開 IDEA → New Project → Spring Initializr
- 選擇:
- Project SDK: Java 17+
- 依賴項:Spring Web, Spring Data JDBC, MySQL Driver
2. 手動添加依賴
2.1 手動添加 MySQL 依賴示例
<!-- pom.xml -->
<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope>
</dependency>
3. 準備 MySQL 數據庫
-- 執行以下 SQL 創建數據庫和表
CREATE DATABASE spring_jdbc_demo;
USE spring_jdbc_demo;CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,email VARCHAR(100) UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
4. 配置數據源
# application.yml
spring:datasource:url: jdbc:mysql://localhost:3306/spring_jdbc_demo?useSSL=false&serverTimezone=Asia/Shanghaiusername: rootpassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Driver
二、基礎 CRUD 操作
1. 實體類定義
public class User {private Integer id;private String name;private String email;private LocalDateTime createdAt;// 省略構造函數、getter/setter、toString
}
2. 插入數據(Auto Increment 處理)
@Repository
public class UserRepository {@Autowiredprivate JdbcTemplate jdbcTemplate;public int insert(User user) {String sql = "INSERT INTO users (name, email) VALUES (?, ?)";return jdbcTemplate.update(sql, user.getName(), user.getEmail());}// 獲取自增主鍵public Integer insertAndReturnId(User user) {SimpleJdbcInsert insert = new SimpleJdbcInsert(jdbcTemplate).withTableName("users").usingGeneratedKeyColumns("id");return insert.executeAndReturnKey(user.toMap()).intValue();}
}
3. 查詢數據
// 使用 BeanPropertyRowMapper 自動映射
public List<User> findAll() {return jdbcTemplate.query("SELECT id, name, email, created_at as createdAt FROM users",new BeanPropertyRowMapper<>(User.class));
}// 帶條件查詢
public Optional<User> findById(int id) {try {return Optional.ofNullable(jdbcTemplate.queryForObject("SELECT * FROM users WHERE id = ?",new Object[]{id},(rs, rowNum) -> new User(rs.getInt("id"),rs.getString("name"),rs.getString("email"),rs.getTimestamp("created_at").toLocalDateTime())));} catch (EmptyResultDataAccessException e) {return Optional.empty();}
}
4. 更新與刪除
public int updateEmail(int id, String newEmail) {return jdbcTemplate.update("UPDATE users SET email = ? WHERE id = ?",newEmail, id);
}public int deleteById(int id) {return jdbcTemplate.update("DELETE FROM users WHERE id = ?",id);
}
三、高級功能實現
1. 批量操作(提升性能)
public int[] batchInsert(List<User> users) {return jdbcTemplate.batchUpdate("INSERT INTO users (name, email) VALUES (?, ?)",new BatchPreparedStatementSetter() {public void setValues(PreparedStatement ps, int i) throws SQLException {ps.setString(1, users.get(i).getName());ps.setString(2, users.get(i).getEmail());}public int getBatchSize() {return users.size();}});
}
2. 事務管理實戰
@Service
public class UserService {@Autowiredprivate UserRepository userRepository;@Transactionalpublic void transferEmail(int fromId, int toId) {User fromUser = userRepository.findById(fromId).orElseThrow();User toUser = userRepository.findById(toId).orElseThrow();userRepository.updateEmail(fromId, "old_" + fromUser.getEmail());userRepository.updateEmail(toId, fromUser.getEmail());}
}
3. 使用 NamedParameterJdbcTemplate
@Repository
public class UserNamedRepository {private final NamedParameterJdbcTemplate namedTemplate;public UserNamedRepository(DataSource dataSource) {this.namedTemplate = new NamedParameterJdbcTemplate(dataSource);}public List<User> findByName(String name) {MapSqlParameterSource params = new MapSqlParameterSource().addValue("name", "%" + name + "%");return namedTemplate.query("SELECT * FROM users WHERE name LIKE :name",params,new BeanPropertyRowMapper<>(User.class));}
}
四、IDEA 高效開發技巧
1. 數據庫連接配置
- 打開 IDEA Database 面板(右側邊欄)
- 添加 MySQL 數據源 → 填寫連接信息
- 開啟自動同步功能(方便查看表結構變化)
2. SQL 語句驗證
- 在代碼中的 SQL 字符串上按
Alt+Enter
→Inject language or reference
→ 選擇 SQL - 獲得語法高亮和自動提示功能
3. 快速測試方法
- 在方法上右鍵 →
Run 'methodName()'
(需安裝 JUnit) - 使用 Spring Boot Test 編寫單元測試
五、常見問題排查
1. 時區問題解決方案
# 在連接字符串中添加時區參數
url: jdbc:mysql://localhost:3306/dbname?serverTimezone=Asia/Shanghai
2. 連接池配置優化
spring:datasource:hikari:maximum-pool-size: 10connection-timeout: 30000idle-timeout: 600000
3. 中文亂碼處理
url: jdbc:mysql://localhost:3306/dbname?characterEncoding=utf8
六、項目結構推薦
src/main/java
├── com.example.demo
│ ├── config # 配置類
│ ├── controller # 控制器
│ ├── model # 實體類
│ ├── repository # 數據訪問層
│ └── service # 業務邏輯層
resources
├── sql # SQL腳本存放目錄
└── application.yml
七、學習資源推薦
- 官方文檔:Spring Framework Data Access
- 調試技巧:IDEA 的 Database 工具 + HTTP Client 測試 API
- 擴展學習:Spring Data JPA 對比學習
完整示例項目:
GitHub 倉庫鏈接
(包含單元測試、API 示例和 SQL 腳本)# 使用 IntelliJ IDEA + Spring JdbcTemplate 操作 MySQL 完全指南
一、開發環境搭建(基于 IDEA)
1. 創建 Spring Boot 項目
- 打開 IDEA → New Project → Spring Initializr
- 選擇:
- Project SDK: Java 17+
- 依賴項:Spring Web, Spring Data JDBC, MySQL Driver
2. 添加 MySQL 依賴
<!-- pom.xml -->
<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope>
</dependency>
3. 準備 MySQL 數據庫
-- 執行以下 SQL 創建數據庫和表
CREATE DATABASE spring_jdbc_demo;
USE spring_jdbc_demo;CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,email VARCHAR(100) UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
4. 配置數據源
# application.yml
spring:datasource:url: jdbc:mysql://localhost:3306/spring_jdbc_demo?useSSL=false&serverTimezone=Asia/Shanghaiusername: rootpassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Driver
二、基礎 CRUD 操作
1. 實體類定義
public class User {private Integer id;private String name;private String email;private LocalDateTime createdAt;// 省略構造函數、getter/setter、toString
}
2. 插入數據(Auto Increment 處理)
@Repository
public class UserRepository {@Autowiredprivate JdbcTemplate jdbcTemplate;public int insert(User user) {String sql = "INSERT INTO users (name, email) VALUES (?, ?)";return jdbcTemplate.update(sql, user.getName(), user.getEmail());}// 獲取自增主鍵public Integer insertAndReturnId(User user) {SimpleJdbcInsert insert = new SimpleJdbcInsert(jdbcTemplate).withTableName("users").usingGeneratedKeyColumns("id");return insert.executeAndReturnKey(user.toMap()).intValue();}
}
3. 查詢數據
// 使用 BeanPropertyRowMapper 自動映射
public List<User> findAll() {return jdbcTemplate.query("SELECT id, name, email, created_at as createdAt FROM users",new BeanPropertyRowMapper<>(User.class));
}// 帶條件查詢
public Optional<User> findById(int id) {try {return Optional.ofNullable(jdbcTemplate.queryForObject("SELECT * FROM users WHERE id = ?",new Object[]{id},(rs, rowNum) -> new User(rs.getInt("id"),rs.getString("name"),rs.getString("email"),rs.getTimestamp("created_at").toLocalDateTime())));} catch (EmptyResultDataAccessException e) {return Optional.empty();}
}
4. 更新與刪除
public int updateEmail(int id, String newEmail) {return jdbcTemplate.update("UPDATE users SET email = ? WHERE id = ?",newEmail, id);
}public int deleteById(int id) {return jdbcTemplate.update("DELETE FROM users WHERE id = ?",id);
}
三、高級功能實現
1. 批量操作(提升性能)
public int[] batchInsert(List<User> users) {return jdbcTemplate.batchUpdate("INSERT INTO users (name, email) VALUES (?, ?)",new BatchPreparedStatementSetter() {public void setValues(PreparedStatement ps, int i) throws SQLException {ps.setString(1, users.get(i).getName());ps.setString(2, users.get(i).getEmail());}public int getBatchSize() {return users.size();}});
}
2. 事務管理實戰
@Service
public class UserService {@Autowiredprivate UserRepository userRepository;@Transactionalpublic void transferEmail(int fromId, int toId) {User fromUser = userRepository.findById(fromId).orElseThrow();User toUser = userRepository.findById(toId).orElseThrow();userRepository.updateEmail(fromId, "old_" + fromUser.getEmail());userRepository.updateEmail(toId, fromUser.getEmail());}
}
3. 使用 NamedParameterJdbcTemplate
@Repository
public class UserNamedRepository {private final NamedParameterJdbcTemplate namedTemplate;public UserNamedRepository(DataSource dataSource) {this.namedTemplate = new NamedParameterJdbcTemplate(dataSource);}public List<User> findByName(String name) {MapSqlParameterSource params = new MapSqlParameterSource().addValue("name", "%" + name + "%");return namedTemplate.query("SELECT * FROM users WHERE name LIKE :name",params,new BeanPropertyRowMapper<>(User.class));}
}
四、IDEA 高效開發技巧
1. 數據庫連接配置
- 打開 IDEA Database 面板(右側邊欄)
- 添加 MySQL 數據源 → 填寫連接信息
- 開啟自動同步功能(方便查看表結構變化)
2. SQL 語句驗證
- 在代碼中的 SQL 字符串上按
Alt+Enter
→Inject language or reference
→ 選擇 SQL - 獲得語法高亮和自動提示功能
3. 快速測試方法
- 在方法上右鍵 →
Run 'methodName()'
(需安裝 JUnit) - 使用 Spring Boot Test 編寫單元測試
五、常見問題排查
1. 時區問題解決方案
# 在連接字符串中添加時區參數
url: jdbc:mysql://localhost:3306/dbname?serverTimezone=Asia/Shanghai
2. 連接池配置優化
spring:datasource:hikari:maximum-pool-size: 10connection-timeout: 30000idle-timeout: 600000
3. 中文亂碼處理
url: jdbc:mysql://localhost:3306/dbname?characterEncoding=utf8
六、項目結構推薦
src/main/java
├── com.example.demo
│ ├── config # 配置類
│ ├── controller # 控制器
│ ├── model # 實體類
│ ├── repository # 數據訪問層
│ └── service # 業務邏輯層
resources
├── sql # SQL腳本存放目錄
└── application.yml
七、學習資源推薦
- 官方文檔:Spring Framework Data Access
- 調試技巧:IDEA 的 Database 工具 + HTTP Client 測試 API
- 擴展學習:Spring Data JPA 對比學習
完整示例項目:
GitHub 倉庫鏈接
(包含單元測試、API 示例和 SQL 腳本)