【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
12會員
73內容數
遇到的坑、解過的題、新知識的探索、舊時代的遺毒!? 工作後我發現,文件更新往往跟不上新需求的更迭,犯錯的歷史總是不斷重演。因此,我改變了方式,蒐集從程式上、系統上的每一次異常處理過程,好讓再次遇到相同的問題時能快速應變。此專題就是我的錯題本,期待日後不管在工作上或交流上遇到難題,都能輕鬆地應答:有什麼難的,我都踩過。
留言
avatar-img
留言分享你的想法!
Err500 的其他內容
本文比較IntelliJ IDEA、VSCode和Eclipse三種Java開發工具的優缺點,針對不同使用者族群提供建議。IntelliJ IDEA適合初學者,VSCode輕量且具彈性,Eclipse則適合舊專案開發。
本文介紹瞭如何在Windows系統中,透過設定.bashrc文件輕量級地配置JDK環境變數,解決不同專案使用不同JDK版本的問題,並涵蓋了環境變數的概念、用途及其他注意事項。
這篇文章記錄了作者將一個小專案移植到JBoss,並使用MyBatis框架進行資料庫操作的過程和遇到的問題。文章詳細描述了MyBatis框架的功能、優缺點,以及作者在使用Annotation和XML配置時遇到的問題,並分享瞭解決方法。
本文深入淺出地介紹Java的main方法,包含方法簽名、存取修飾子(public、private)、靜態關鍵字static、回傳值、傳入參數等重要概念,並以實際範例和圖解說明JVM如何尋找並執行main方法,以及static區塊的執行順序。
學習Spring Boot是Java工程師必備技能,文章分享瞭如何自學並快速上手Spring Boot開發,包括架構、開發工具、專案建立以及實作過程。
相信很多初學者學python的原因,不外乎語法簡單、好上手、重點是有很多現成的套件可以玩。那麼,Java呢?有!當然有!而且還多到你不知道該選哪個好! 今天的文章主要示範如何在vscode新建立Java 的maven專案,並且透過maven安裝這些額外的套件(依賴)
本文比較IntelliJ IDEA、VSCode和Eclipse三種Java開發工具的優缺點,針對不同使用者族群提供建議。IntelliJ IDEA適合初學者,VSCode輕量且具彈性,Eclipse則適合舊專案開發。
本文介紹瞭如何在Windows系統中,透過設定.bashrc文件輕量級地配置JDK環境變數,解決不同專案使用不同JDK版本的問題,並涵蓋了環境變數的概念、用途及其他注意事項。
這篇文章記錄了作者將一個小專案移植到JBoss,並使用MyBatis框架進行資料庫操作的過程和遇到的問題。文章詳細描述了MyBatis框架的功能、優缺點,以及作者在使用Annotation和XML配置時遇到的問題,並分享瞭解決方法。
本文深入淺出地介紹Java的main方法,包含方法簽名、存取修飾子(public、private)、靜態關鍵字static、回傳值、傳入參數等重要概念,並以實際範例和圖解說明JVM如何尋找並執行main方法,以及static區塊的執行順序。
學習Spring Boot是Java工程師必備技能,文章分享瞭如何自學並快速上手Spring Boot開發,包括架構、開發工具、專案建立以及實作過程。
相信很多初學者學python的原因,不外乎語法簡單、好上手、重點是有很多現成的套件可以玩。那麼,Java呢?有!當然有!而且還多到你不知道該選哪個好! 今天的文章主要示範如何在vscode新建立Java 的maven專案,並且透過maven安裝這些額外的套件(依賴)
你可能也想看
Google News 追蹤
Thumbnail
此章節旨在引導讀者如何建立Java開發環境,包括安裝JDK、使用命令行工具編寫和運行Java程式,以及如何在Visual Studio Code、IntelliJ IDEA和Eclipse等IDE中設置和使用Java環境。
Thumbnail
此章節旨在介紹Java的基本語法、註解和變數的使用。透過學習,讀者將了解Java程式的基本結構、程式進入點的定義、如何撰寫單行和多行註解,以及如何宣告和初始化變數。
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
建立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
學習Spring Boot是Java工程師必備技能,文章分享瞭如何自學並快速上手Spring Boot開發,包括架構、開發工具、專案建立以及實作過程。
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
本課程學習如何添加 Room 資料庫相關依賴庫配置。
在實務情境上,常會有在單一專案程式庫中,存取多個不同資料庫的使用情境,在這種情況下,我們通常會設置多個資料庫連線(Database Connection)設定。 在平常開發使用設很方便,但要做測試時就會發現一些問題: 在測試程式碼或 Seeder 中調用 factory() 時,都是在預設連線資
Thumbnail
此章節旨在引導讀者如何建立Java開發環境,包括安裝JDK、使用命令行工具編寫和運行Java程式,以及如何在Visual Studio Code、IntelliJ IDEA和Eclipse等IDE中設置和使用Java環境。
Thumbnail
此章節旨在介紹Java的基本語法、註解和變數的使用。透過學習,讀者將了解Java程式的基本結構、程式進入點的定義、如何撰寫單行和多行註解,以及如何宣告和初始化變數。
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
建立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
學習Spring Boot是Java工程師必備技能,文章分享瞭如何自學並快速上手Spring Boot開發,包括架構、開發工具、專案建立以及實作過程。
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
本課程學習如何添加 Room 資料庫相關依賴庫配置。
在實務情境上,常會有在單一專案程式庫中,存取多個不同資料庫的使用情境,在這種情況下,我們通常會設置多個資料庫連線(Database Connection)設定。 在平常開發使用設很方便,但要做測試時就會發現一些問題: 在測試程式碼或 Seeder 中調用 factory() 時,都是在預設連線資