如何在 SAP BTP Java 應用裡使用 SQLite 資料庫

注销發表於2022-03-12

SAP Cloud Application Programming 模型的推薦是將 service 和 model 模型的定義分離開。

因此,我們在 db 資料夾裡定義 model model.

新建一個 schema.cds 檔案:

    namespace sap.capire.products;

    using { Currency, cuid, managed, sap.common.CodeList } from '@sap/cds/common';

    entity Products : cuid, managed {
        title    : localized String(111);
        descr    : localized String(1111);
        stock    : Integer;
        price    : Decimal(9,2);
        currency : Currency;
        category : Association to Categories;
    }

    entity Categories : CodeList {
        key ID   : Integer;
        parent   : Association to Categories;
        children : Composition of many Categories on children.parent = $self;
    }

內容如下:

這裡用關鍵字 entity 定義了 Products 和 Categories 兩個領域模型。其中Currency,cuid 和 CodeList 等標準型別,來自 @sap/cds/common:

localized 關鍵字可用於標記需要翻譯的元素。 儲存不同語言的翻譯和儲存預設後備翻譯的能力由 CDS 自動處理。

Associations 和 Compositions

associationscompositions 可用於定義實體之間的關係。 它們通常允許您在不明確使用外來鍵的情況下定義這些關係。

雖然關聯定義了實體之間相當鬆散的耦合,但組合定義了包含關係。 組合也可以被認為是定義深層結構。 可以沿這些結構執行深度插入和更新插入。

在域模型中,類別實體定義了父元素和子元素。 這啟用了類別的層次結構。 一個類別的 children entity 被建模為一個組合。 一個包含所有子類的類別定義了一個深層巢狀結構。 刪除一個類別將自動刪除其所有子項。 然而,一個類別的父類被建模為一個關聯。 刪除一個類別顯然不應該刪除它的父類。

cuid 和 managed 都是 aspect,後者用附加元素擴充套件 entity. cuid aspect 將 UUID 型別的關鍵元素 ID 新增到 entity.

managed aspect 將建立和修改時間戳等欄位新增到 entity 內。

我們按住 ctrl 鍵 + 左鍵,就能檢視到這些 aspect 對應的實現:

CodeLists 可用於儲存基於程式碼(例如貨幣、國家或語言)的全域性可翻譯定義。 特別是對於 UI,CodeList 可用於為某些輸入欄位提供值幫助。

Currency 定義是一種型別。 它定義了與貨幣實體的關聯。 Currencies 實體基於 ISO 4217 並使用三個字母的字母程式碼作為鍵,例如 EUR 或 USD,並提供了儲存相應貨幣符號(例如 € 或 $)的可能性。

在 service 定義裡,將 domain model 裡某些欄位暴露出來:

下面我們需要將 domain model 部署到 sqllite 裡。

首先使用命令列安裝 sqlite

npm install --save-dev sqlite3

執行如下命令列,使用命令列將 domain model 初始化 sqlite:

cds deploy --to sqlite

下一步我們需要將 spring boot 應用同 sqlite 資料庫建立關聯關係。

開啟 main/resources/application.yaml 檔案:

---
spring:
  profiles: default
  datasource:
    url: "jdbc:sqlite:/home/user/projects/products-service/sqlite.db"
    driver-class-name: org.sqlite.JDBC
    initialization-mode: never
    hikari:
      maximum-pool-size: 1

使用 curl 插入一條新的資料:

curl -X POST http://localhost:8080/odata/v4/AdminService/Categories \
-H "Content-Type: application/json" \
-d '{"ID": 1, "name": "TechEd", "descr": "TechEd related topics", "children": [{"ID": 10, "name": "CAP Java", "descr": "Run on Java"}, {"ID": 11, "name": "CAP Node.js", "descr": "Run on Node.js"}]}'

然後使用下面的 url,即可成功訪問剛剛插入的 categories 資料:

https://workspaces-ws-pdwk4-a...

相關文章