使用 IntelliJ IDEA + Spring JdbcTemplate 操作 MySQL 指南

使用 IntelliJ IDEA + Spring JdbcTemplate 操作 MySQL 完全指南

一、開發環境搭建(基于 IDEA)

1. 創建 Spring Boot 項目

  1. 打開 IDEA → New Project → Spring Initializr
  2. 選擇:
    • 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. 數據庫連接配置

  1. 打開 IDEA Database 面板(右側邊欄)
  2. 添加 MySQL 數據源 → 填寫連接信息
  3. 開啟自動同步功能(方便查看表結構變化)

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

2. SQL 語句驗證

  • 在代碼中的 SQL 字符串上按 Alt+EnterInject 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

七、學習資源推薦

  1. 官方文檔:Spring Framework Data Access
  2. 調試技巧:IDEA 的 Database 工具 + HTTP Client 測試 API
  3. 擴展學習:Spring Data JPA 對比學習

完整示例項目:
GitHub 倉庫鏈接
(包含單元測試、API 示例和 SQL 腳本)# 使用 IntelliJ IDEA + Spring JdbcTemplate 操作 MySQL 完全指南

一、開發環境搭建(基于 IDEA)

1. 創建 Spring Boot 項目

  1. 打開 IDEA → New Project → Spring Initializr
  2. 選擇:
    • 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. 數據庫連接配置

  1. 打開 IDEA Database 面板(右側邊欄)
  2. 添加 MySQL 數據源 → 填寫連接信息
  3. 開啟自動同步功能(方便查看表結構變化)

在這里插入圖片描述

2. SQL 語句驗證

  • 在代碼中的 SQL 字符串上按 Alt+EnterInject 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

七、學習資源推薦

  1. 官方文檔:Spring Framework Data Access
  2. 調試技巧:IDEA 的 Database 工具 + HTTP Client 測試 API
  3. 擴展學習:Spring Data JPA 對比學習

完整示例項目:
GitHub 倉庫鏈接
(包含單元測試、API 示例和 SQL 腳本)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/92325.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92325.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92325.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從憤怒的小鳥來看Unity武器拖尾的特效優化

目錄 前言 素材下載 介紹 官方文檔 不添加拖尾的效果 添加拖尾 代碼控制拖尾生成 拖尾排序問題 效果 修改拖尾高度和存活時間 效果 待機時無拖尾 效果 參考 前言 在游戲開發過程中&#xff0c;我們經常需要為武器添加拖尾特效&#xff0c;效果如下所示 Unity 自…

Web開發模式 前端渲染 后端渲染 身份認證

Web 開發模式 # 目前主流的Web 開發模式 兩種 一、基于 服務器端渲染 的傳統 Web開發模式 二、基于 前后端分離 的新型 Web開發模式# 服務端渲染的優缺點# 優點&#xff1a;1. 前端耗時少因為服務端負責動態生成 HTML內容&#xff0c;瀏覽器&#xff08;包括手…

C++ WonderTrader 源碼分析之浮點數處理

介紹 在WonderTrader的文件decimal.h中封裝了一些用于浮點數&#xff08;double&#xff09;處理的工具函數&#xff0c;主要目的是解決浮點數精度誤差帶來的比較問題&#xff0c;以及進行一些常用運算&#xff08;四舍五入、比較、取模等&#xff09;。下面我們逐行詳細解釋每…

指針——練習

sizeof和strlensizeofsizeof是用來計算變量所占內存空間大小的&#xff0c;單位是字節&#xff0c;如果操作數是類型&#xff0c;計算的是使用類型創建的變量所占內存空間的大小。sizeof只關注占用內存空間的大小&#xff0c;不在乎內存中存放什么數據。我們來看一下這個代碼&a…

華為云 Flexus 部署 coze-studio

華為云 Flexus 部署 coze-studio 一、前置 主機和程序&#xff1a;云主機&#xff08;Flexus L ubuntu&#xff09; coze-studio 部署方式&#xff1a;docker&#xff08;提前裝好的&#xff09; 字節跳動開源AI智能體開發平臺Coze&#xff0c;具備極低的硬件門檻——2核CPU…

Linux系統編程Day7 -- 基于Linux系統知識的第一個程序

往期內容回顧 自動化構建工具-make/Makefile gcc/g編譯及鏈接 Vim工具的使用 Linux常用工具&#xff08;yum與vim&#xff09; ?????? Linux系統編程Day4-- Shell與權限 編寫第一個Linux程序 今天我們要利用我們所學到的Linux語言來編譯第一個Linux程序&#xff0c;在進行…

安卓264和265編碼器回調編碼數據寫入.265或者.264文件、查看編碼數據是否正確、轉換為Mp4文件、查看Mp4文件信息等方法合集

一、寫入文件 1、變量定義 private FileOutputStream m265FileOutputStream null; private File m265File null; private static final String HEVC_265_FILE_NAME "output.265"; // 或 .265 private static final String AVC_264_FILE_NAME "output.264&qu…

如何打造一支AI時代下的IT團隊,為企業戰略目標快速賦能

執行摘要 在當前AI技術迅猛發展的背景下&#xff0c;中國中小企業正面臨著前所未有的數字化轉型機遇與挑戰。據最新調研顯示&#xff0c;2025年全球AI市場規模將突破5000億美元&#xff0c;而中國AI應用占比已達35%。與此同時&#xff0c;AI領域人才缺口高達1000萬人&#xff0…

機器學習-LinearRegression

1、 關鍵數學知識點&#xff1a; 邊緣概率密度 聯合密度對非關注變量積分&#xff1a;fX(x)∫fX,Y(x,y)dyf_X(x)∫f_{X,Y}(x,y)dyfX?(x)∫fX,Y?(x,y)dy&#xff1b; 條件概率密度 切片 fX∣Y(x∣y)fX,Y(x,y)/fY(y)f_{X|Y}(x|y)f_{X,Y}(x,y)/f_Y(y)fX∣Y?(x∣y)fX,Y?(x,y)…

解決微信小程序中如何把npm構建的模塊與主包分離,構建到分包上面

1、配置分包2、復制packge.json到分包中3、在project.config.json中增加npm配置4、終端執行npm i下載模塊5、構建npm到miniprogram_npm中

自動駕駛中的傳感器技術21——Camera(12)

自動駕駛攝像頭的圖像評測 攝像頭的性能受到環境光照、天氣條件、運動模糊等因素的影響&#xff0c;因此需要通過多方面的評測來確保其在各種場景下的可靠性。 在自動駕駛領域&#xff0c;圖像質量評估不僅關注圖像的清晰度、分辨率等傳統指標&#xff0c;還需要結合目標檢測…

AI+OA原生應用 麥當秀AIPPT

麥當秀也在WAIC期間重新定義AIOA一、什么是“原生AI”&#xff1f;“原生AI”可以理解為&#xff1a;AI系統本身具備完整的辦公能力&#xff0c;不需要依賴傳統辦公軟件&#xff08;如Word、Excel、PPT&#xff09;作為載體。也就是說&#xff0c;用戶可以直接通過AI系統完成文…

K8S 入門操作

之前一直用kubectl這個命令操作&#xff0c;這些都是基于命令來操作K8S kubectl get pods kubectl get nodes kubectl get svc kubectl create deployment... kubectl expose deployment...kubectl 文檔 命令行工具 (kubectl) | Kubernetes 命令參考 Kubectl Reference Doc…

蒙文OCR識別技術難點實現及應用場景剖析

一、蒙文OCR識別核心技術難點1. 文字特性帶來的識別挑戰連寫特性&#xff1a;蒙文字符存在復雜的連寫形式&#xff08;詞首、詞中、詞尾變形&#xff09;方向特異性&#xff1a;傳統蒙文為垂直書寫&#xff08;現代也有橫排&#xff09;&#xff0c;需特殊方向處理字符相似性&a…

通過docker構建一個java鏡像

通過docker構建一個java鏡像 FROM zlyxzq/centos7:v1 VOLUME /tmp WORKDIR /app COPY /target/aa.jar /root/app/aa.jarENV TZAsia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneENV JAVA_HOME /usr/local/java ENV PA…

SpringBoot學習日記 Day5:解鎖企業級開發核心技能

一、前言&#xff1a;從玩具項目到生產系統經過前四天的學習&#xff0c;我們已經能夠開發基礎功能了。但要讓應用真正具備生產價值&#xff0c;還需要掌握數據庫高級操作、事務控制、緩存優化等企業級開發技能。今天就來攻克這些關鍵知識點&#xff01;二、JPA進階&#xff1a…

將英文PDF文件完整地翻譯成中文的4類方式

文章目錄一、在線翻譯服務&#xff08;最快捷&#xff0c;適合臨時查看&#xff09;1.1 代表工具&#xff1a;1.2 操作流程&#xff08;以Google翻譯為例&#xff09;1.3 優點和缺點1.4 適用場景二、專業軟件&#xff08;最佳平衡&#xff0c;兼顧格式與質量&#xff09;2.1 代…

【分享】我國八大沙漠空間矢量范圍

今天小編整理分享的是 我國八大沙漠空間矢量范圍shp。▲ 我國八大沙漠空間矢量范圍概況數據概況我國八大沙漠空間矢量范圍。中國八大沙漠。分別為騰格里沙漠&#xff0c;塔克拉馬干沙漠&#xff0c;巴丹吉林沙漠&#xff0c;庫布奇沙漠&#xff0c;烏蘭布和沙漠&#xff0c;庫…

【音視頻】WebRTC C++ native 編譯

一、搭建環境 我們這里介紹在Windows10VS2019的環境下編譯WebRTC源碼&#xff0c;由于WebRTC源碼在外網上&#xff0c;需要科學的方式下載&#xff0c;不然下載特別慢&#xff0c;建議直接找國內下載好的源碼&#xff0c;這里的源碼是2021年的版本&#xff1a;https://pan.bai…

Selenium在Pyhton應用

目錄 1. selenium的基本原理 2. selenium環境的搭建步驟 3. 元素的定位和操作 4.元素的基本屬性方法 5.瀏覽器的操作方法 6.三種等待 強制等待 顯示等待 隱式等待 7. 鍵盤與鼠標的操作 鼠標懸停用 拖拽操作 8. 下拉框元素定位 9.頁面滾動操作 10. 頁面截圖操作 S…