SAP CAP篇二:为Service加上数据库支持

在篇一快速创建一个Service,基于Java的实现中,可见使用SAP CAP (Cloud Programming Model)确实可以提高开发效率。尤其是Java技术栈上,对比于之前使用Olingo框架来实现oData,使用SAP CAP真的可以做到指数级别的效率提升。

当然,篇一中介绍的Service只使用了内存来存储和读取数据。本篇将加上数据库支持。

本系列文章

SAP CAP篇一: 快速创建一个Service,基于Java的实现
SAP CAP篇二:为Service加上数据库支持
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环境)
SAP CAP篇八:为CAP添加App Router并支持Fiori Launchpad (Sandbox环境)
SAP CAP篇九:升级为SAP CDS 7.0, CAP Java 2以及Spring Boot 3
SAP CAP篇十:理解Fiori UI的Annoation定义
SAP CAP篇十一:支持Media Object:图片、附件等
SAP CAP篇十二:AppRouter 深入研究

前期准备

根据SAP CAP的官方文档,CAP可以非常容易地添加数据库坚持。然而,所有的数据库中,支持得最好的当然是SAP自家的HANA数据库。可惜,SAP HANA数据库作为企业级数据库,无论版权、安装环境都不是本地环境能支持的。所以本篇中使用Sqlite作为数据库。

值得提醒的是,SAP CAP生成的Java项目,在没有指定数据库的情况下,默认使用H2 In-memory数据库。
H2 Inmemory
另外,有一个有意思的点是,SAP官方文档中提及:

The CAP Java runtime is tested with PostgreSQL 12.

但是使用PostgreSQL通常搭建一个Docker,这个虽然很容易,但是简单起见,还是使用Sqlite吧。

首先,安装sqlite数据库。在项目文件夹下运行NPM指令:

npm i -D sqlite3

其次,在Visual Studio Code中,安装额外的Plugin:

  • Sqlite Viewer
    这个Plugin允许在Visual Studio Code直接打开Sqlite文件。因为我们在这个Service中只需要对数据库进行查看,所以安装一个Viewer就足够了。

添加一个基于数据库表的Entity

创建db文件夹

在项目的根目录中,创建db文件夹。

创建schema.cds文件

创建schema.cds,并添加如下的Entity:

entity DBEntities {
    key ID : Integer;
    title  : String(111);
    descr  : String(1111);
}

初始化数据库表

CAP还支持对数据库的表进行初始化。这个初始化需要对应的csv文件。
首先,在db文件夹中,添加data文件夹。
其次,在data文件夹中添加文件DBEntities.csv

ID;title;descr
1;test1; Desc of test1
2;test2; Desc of test2

在Service中引用刚刚创建的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。这里的目的确保框架不需要为该Entity创建数据库表。

创建数据库

现在,可以创建数据库了。

cds deploy --to sqlite

执行上述命令之后,会在项目的根目录下创建了db.sqlite文件。

可以在Visual Studio Code打开该文件来查看对应的数据库表是不是已经创建成功。还可以查看数据库中是否已经有初始化数据。

CDS deploy

DB表和数据

这时可以发现package.json文件已经发生修改:

  "cds": {
    "requires": {
      "db": {
        "kind": "sqlite",
        "credentials": {
          "database": "db.sqlite"
        }
      }
    }
  }

修改程序,让程序使用刚刚创建的数据库文件

文章开头已经提及,默认Java项目会使用H2数据库。所以,要使用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

运行程序

通过Maven命令来运行程序,并指定使用sqlite:

mvn spring-boot:run -D"spring-boot.run.profiles"=sqlite

这时还可以使用Postman来进行测试,并确认数据库表是不是被更新。虽然一行代码没写,SAP CAP已经全部默认实现了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值