在篇一快速創(chuàng)建一個(gè)Service,基于Java的實(shí)現(xiàn)中,可見使用SAP CAP (Cloud Programming Model)確實(shí)可以提高開發(fā)效率。尤其是Java技術(shù)棧上,對(duì)比于之前使用Olingo框架來實(shí)現(xiàn)oData,使用SAP CAP真的可以做到指數(shù)級(jí)別的效率提升。
當(dāng)然,篇一中介紹的Service只使用了內(nèi)存來存儲(chǔ)和讀取數(shù)據(jù)。本篇將加上數(shù)據(jù)庫支持。
本系列文章
SAP CAP篇一: 快速創(chuàng)建一個(gè)Service,基于Java的實(shí)現(xiàn)
SAP CAP篇二:為Service加上數(shù)據(jù)庫支持
SAP CAP篇三:定義Model
SAP CAP篇四:為CAP添加Fiori Elements程序(1)
SAP CAP篇五:為CAP添加Fiori Elements程序(2)
SAP CAP篇六:為CAP添加Fiori Elements程序(3)
SAP CAP篇七:為CAP添加Fiori Launchpad入口 (Sandbox環(huán)境)
SAP CAP篇八:為CAP添加App Router并支持Fiori Launchpad (Sandbox環(huán)境)
SAP CAP篇九:升級(jí)為SAP CDS 7.0, CAP Java 2以及Spring Boot 3
SAP CAP篇十:理解Fiori UI的Annoation定義
SAP CAP篇十一:支持Media Object:圖片、附件等
SAP CAP篇十二:AppRouter 深入研究
前期準(zhǔn)備
根據(jù)SAP CAP的官方文檔,CAP可以非常容易地添加數(shù)據(jù)庫堅(jiān)持。然而,所有的數(shù)據(jù)庫中,支持得最好的當(dāng)然是SAP自家的HANA數(shù)據(jù)庫??上?,SAP HANA數(shù)據(jù)庫作為企業(yè)級(jí)數(shù)據(jù)庫,無論版權(quán)、安裝環(huán)境都不是本地環(huán)境能支持的。所以本篇中使用Sqlite作為數(shù)據(jù)庫。
值得提醒的是,SAP CAP生成的Java項(xiàng)目,在沒有指定數(shù)據(jù)庫的情況下,默認(rèn)使用H2 In-memory數(shù)據(jù)庫。
另外,有一個(gè)有意思的點(diǎn)是,SAP官方文檔中提及:
The CAP Java runtime is tested with PostgreSQL 12.
但是使用PostgreSQL通常搭建一個(gè)Docker,這個(gè)雖然很容易,但是簡(jiǎn)單起見,還是使用Sqlite吧。
首先,安裝sqlite數(shù)據(jù)庫。在項(xiàng)目文件夾下運(yùn)行NPM指令:
npm i -D sqlite3
其次,在Visual Studio Code中,安裝額外的Plugin:
- Sqlite Viewer
這個(gè)Plugin允許在Visual Studio Code直接打開Sqlite文件。因?yàn)槲覀冊(cè)谶@個(gè)Service中只需要對(duì)數(shù)據(jù)庫進(jìn)行查看,所以安裝一個(gè)Viewer就足夠了。
添加一個(gè)基于數(shù)據(jù)庫表的Entity
創(chuàng)建db文件夾
在項(xiàng)目的根目錄中,創(chuàng)建db
文件夾。
創(chuàng)建schema.cds
文件
創(chuàng)建schema.cds
,并添加如下的Entity:
entity DBEntities {
key ID : Integer;
title : String(111);
descr : String(1111);
}
初始化數(shù)據(jù)庫表
CAP還支持對(duì)數(shù)據(jù)庫的表進(jìn)行初始化。這個(gè)初始化需要對(duì)應(yīng)的csv
文件。
首先,在db
文件夾中,添加data
文件夾。
其次,在data
文件夾中添加文件DBEntities.csv
:
ID;title;descr
1;test1; Desc of test1
2;test2; Desc of test2
在Service中引用剛剛創(chuàng)建的Entity
修改Service Definition
修改Service Defintion的cds文件。
service DemoService {
@cds.persistence.skip: true
entity DemoEntity {
key ID: Integer;
title: String(111);
descr: String(1111);
}
entity DBEntities as projection on DBEntities;
}
注意,這里在上篇的DemoEntity
中加上了@cds.persistence.skip: true
的annotation。這里的目的確??蚣懿恍枰獮樵揈ntity創(chuàng)建數(shù)據(jù)庫表。
創(chuàng)建數(shù)據(jù)庫
現(xiàn)在,可以創(chuàng)建數(shù)據(jù)庫了。
cds deploy --to sqlite
執(zhí)行上述命令之后,會(huì)在項(xiàng)目的根目錄下創(chuàng)建了db.sqlite
文件。
可以在Visual Studio Code打開該文件來查看對(duì)應(yīng)的數(shù)據(jù)庫表是不是已經(jīng)創(chuàng)建成功。還可以查看數(shù)據(jù)庫中是否已經(jīng)有初始化數(shù)據(jù)。
這時(shí)可以發(fā)現(xiàn)package.json
文件已經(jīng)發(fā)生修改:
"cds": {
"requires": {
"db": {
"kind": "sqlite",
"credentials": {
"database": "db.sqlite"
}
}
}
}
修改程序,讓程序使用剛剛創(chuàng)建的數(shù)據(jù)庫文件
文章開頭已經(jīng)提及,默認(rèn)Java項(xiàng)目會(huì)使用H2數(shù)據(jù)庫。所以,要使用Sqlite,需要配置application.yml
文件:
---
spring:
config:
activate:
on-profile: sqlite
datasource:
url: "jdbc:sqlite:/db.sqlite"
driver-class-name: org.sqlite.JDBC
hikari:
maximum-pool-size: 1
運(yùn)行程序
通過Maven命令來運(yùn)行程序,并指定使用sqlite:文章來源:http://www.zghlxwxcb.cn/news/detail-421195.html
mvn spring-boot:run -D"spring-boot.run.profiles"=sqlite
這時(shí)還可以使用Postman來進(jìn)行測(cè)試,并確認(rèn)數(shù)據(jù)庫表是不是被更新。雖然一行代碼沒寫,SAP CAP已經(jīng)全部默認(rèn)實(shí)現(xiàn)了。文章來源地址http://www.zghlxwxcb.cn/news/detail-421195.html
到了這里,關(guān)于SAP CAP篇二:為Service加上數(shù)據(jù)庫支持的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!