【Java】SpringBoot專案:MySQL資料庫整合與實作

更新於 發佈於 閱讀時間約 6 分鐘

前言

前一篇處理過依賴項目pom.xml,撰寫一個controller,透過畫面拿到學生資訊,還沒真正實作從資料庫存取資料。

在使用JPA前,這次用使用JDBC Template做簡單的存取,既不用很原始的手動處理JDBC細節,也不會受制於ORM框架下的程式寫法。

開始前,記得確認有沒有下列依賴在pom.xml中,以及application.yaml內有處理資料庫連線設定

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>


系統架構

raw-image

要做的流程如下:

  1. 方便起見,以之前開放出來的endpoint為觸發點,在頁面請求後,跟資料庫要資料
  2. 先到table_configs表中,拿到對應資料表要執行的SQL查詢
  3. 根據拿到的SQL語法,執行資料拿取,以heavy_records表為例


資料表Layout

table_configs

table_configs

heavy_records

heavy_records


heavy_records資料表是為了模擬表中記錄達一定量級下,確認運行過程中會不會出現記憶體不足或效能不佳等問題出現,暫時先塞入10000筆無意義的假數據進行測試。


程式實作

撰寫DataFetchService用來取資料:

  1. 加上@Service成為一個componentSpring知道是一個要列入控管的Bean
  2. @Autowired在建立這個物件時注入JDBCTemplate
  3. 資料量不大下,不用特別處理fetch_size,先用queryForList測試看看
@Service
public class DataFetchService {

    @Autowired
    private JdbcTemplate template;

    public List<Map<String, Object>> getAllData(String sql) {
        var result = template.queryForList(sql);
        return result;
    }
}


借一下原本的StudentController中進行本次的邏輯實作:

  1. 注入DataFetchService
  2. service查詢資料庫,並且確保設定的表在要輸出的清單中,清單為後續規劃使用
  3. 確認拿到的設定及取得的資料
  4. 寫成csv檔案
    @Autowired
    DataFetchService service;

    @GetMapping("/student")
    public Student getStudent() {

        String sql = "select * from table_configs";
        var configs = service.getAllData(sql);
        var targetTables = List.of("heavy_records");

        for (var config : configs) {
            String tableName = config.get("table_name").toString();
            if (targetTables.contains(tableName)) {
                System.out.println("settings: " + configs.get(0));
            }
        }

        var executeSql = configs.get(0).getOrDefault("execute_sql", "").toString();
        System.out.println("actual query sql : " + executeSql);

        var resultList = service.getAllData(executeSql);
        System.out.println("chack data: " + resultList.get(0));

        String exportFileName = "test.csv";
        CsvUtils.writeMapToCSV(resultList, getHeaders(), exportFileName, '|');

        return new Student(1, "John");
    }


測試結果


log確認資料

log確認資料

從log中可以看到,如預期中資料庫中獲取設定內資訊,並成功獲取對應表的資料。

輸出的csv檔案

輸出的csv檔案

最後將資料輸出檔案,確認10000筆寫入。
因為重複操作,且輸出寫檔的程式寫成增加的模式,才會看到快4萬筆紀錄。


後記

雖然加入了不少東西,實際跟資料庫交換只要依賴跟連線配置處理完成,就可以透過JDBC Template進行存取了。

其他需求端看業務流程進行處理,例如資料格式轉換、客製分隔符號、語法檢核、異常處理、定期排程觸發、寄送通知信等機制,都可以有彈性的追加微調。


留言
avatar-img
留言分享你的想法!
avatar-img
Err500
12會員
76內容數
遇到的坑、解過的題、新知識的探索、舊時代的遺毒!? 工作後我發現,文件更新往往跟不上新需求的更迭,犯錯的歷史總是不斷重演。因此,我改變了方式,蒐集從程式上、系統上的每一次異常處理過程,好讓再次遇到相同的問題時能快速應變。此專題就是我的錯題本,期待日後不管在工作上或交流上遇到難題,都能輕鬆地應答:有什麼難的,我都踩過。
Err500的其他內容
2025/03/15
本文比較IntelliJ IDEA、VSCode和Eclipse三種Java開發工具的優缺點,針對不同使用者族群提供建議。IntelliJ IDEA適合初學者,VSCode輕量且具彈性,Eclipse則適合舊專案開發。
Thumbnail
2025/03/15
本文比較IntelliJ IDEA、VSCode和Eclipse三種Java開發工具的優缺點,針對不同使用者族群提供建議。IntelliJ IDEA適合初學者,VSCode輕量且具彈性,Eclipse則適合舊專案開發。
Thumbnail
2025/02/21
本文介紹瞭如何在Windows系統中,透過設定.bashrc文件輕量級地配置JDK環境變數,解決不同專案使用不同JDK版本的問題,並涵蓋了環境變數的概念、用途及其他注意事項。
Thumbnail
2025/02/21
本文介紹瞭如何在Windows系統中,透過設定.bashrc文件輕量級地配置JDK環境變數,解決不同專案使用不同JDK版本的問題,並涵蓋了環境變數的概念、用途及其他注意事項。
Thumbnail
2025/02/18
這篇文章記錄了作者將一個小專案移植到JBoss,並使用MyBatis框架進行資料庫操作的過程和遇到的問題。文章詳細描述了MyBatis框架的功能、優缺點,以及作者在使用Annotation和XML配置時遇到的問題,並分享瞭解決方法。
Thumbnail
2025/02/18
這篇文章記錄了作者將一個小專案移植到JBoss,並使用MyBatis框架進行資料庫操作的過程和遇到的問題。文章詳細描述了MyBatis框架的功能、優缺點,以及作者在使用Annotation和XML配置時遇到的問題,並分享瞭解決方法。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
此章節旨在引導讀者如何建立Java開發環境,包括安裝JDK、使用命令行工具編寫和運行Java程式,以及如何在Visual Studio Code、IntelliJ IDEA和Eclipse等IDE中設置和使用Java環境。
Thumbnail
此章節旨在引導讀者如何建立Java開發環境,包括安裝JDK、使用命令行工具編寫和運行Java程式,以及如何在Visual Studio Code、IntelliJ IDEA和Eclipse等IDE中設置和使用Java環境。
Thumbnail
此章節旨在介紹Java的基本語法、註解和變數的使用。透過學習,讀者將了解Java程式的基本結構、程式進入點的定義、如何撰寫單行和多行註解,以及如何宣告和初始化變數。
Thumbnail
此章節旨在介紹Java的基本語法、註解和變數的使用。透過學習,讀者將了解Java程式的基本結構、程式進入點的定義、如何撰寫單行和多行註解,以及如何宣告和初始化變數。
Thumbnail
這篇文章的目的是對Java程式設計語言進行介紹,包括它的特性、應用範疇、主要使用者,以及相關的學習資源和常見的庫與框架。此外,它也提供了一些學習Java的渠道,以及與Java相關的其他知識。
Thumbnail
這篇文章的目的是對Java程式設計語言進行介紹,包括它的特性、應用範疇、主要使用者,以及相關的學習資源和常見的庫與框架。此外,它也提供了一些學習Java的渠道,以及與Java相關的其他知識。
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
核心元件 Spring Boot:Spring Cloud的基礎框架。 Spring Cloud Starters:Spring Boot的依賴管理。 Consul:微服務系統的註冊中心。 Eureka:微服務系統的註冊中心。 Feign:簡化微服務之間的溝通方式。 Ribbon:處理程
Thumbnail
核心元件 Spring Boot:Spring Cloud的基礎框架。 Spring Cloud Starters:Spring Boot的依賴管理。 Consul:微服務系統的註冊中心。 Eureka:微服務系統的註冊中心。 Feign:簡化微服務之間的溝通方式。 Ribbon:處理程
Thumbnail
部署Consul服務 docker run --name consul -p xxxx:xxxx -v /tmp/consul/conf/:/consul/conf/ -v /tmp/consul/data/:/consul/data/ -d consul 於pom.xml設定Spring
Thumbnail
部署Consul服務 docker run --name consul -p xxxx:xxxx -v /tmp/consul/conf/:/consul/conf/ -v /tmp/consul/data/:/consul/data/ -d consul 於pom.xml設定Spring
Thumbnail
建立Maven專案 於pom.xml設定Spring Boot <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://
Thumbnail
建立Maven專案 於pom.xml設定Spring Boot <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
學習Spring Boot是Java工程師必備技能,文章分享瞭如何自學並快速上手Spring Boot開發,包括架構、開發工具、專案建立以及實作過程。
Thumbnail
學習Spring Boot是Java工程師必備技能,文章分享瞭如何自學並快速上手Spring Boot開發,包括架構、開發工具、專案建立以及實作過程。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News