如何在 SAP BTP Java 应用里使用 SQLite 数据库

简介: 如何在 SAP BTP Java 应用里使用 SQLite 数据库
+关注继续查看

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;
    }

内容如下:

image

这里用关键字 entity 定义了 Products 和 Categories 两个领域模型。其中Currency,cuid 和 CodeList 等标准类型,来自 @sap/cds/common:

localized 关键字可用于标记需要翻译的元素。 存储不同语言的翻译和存储默认后备翻译的能力由 CDS 自动处理。

Associations 和 Compositions

associations 和 compositions 可用于定义实体之间的关系。 它们通常允许您在不明确使用外键的情况下定义这些关系。


虽然关联定义了实体之间相当松散的耦合,但组合定义了包含关系。 组合也可以被认为是定义深层结构。 可以沿这些结构执行深度插入和更新插入。


在域模型中,类别实体定义了父元素和子元素。 这启用了类别的层次结构。 一个类别的 children entity 被建模为一个组合。 一个包含所有子类的类别定义了一个深层嵌套结构。 删除一个类别将自动删除其所有子项。 然而,一个类别的父类被建模为一个关联。 删除一个类别显然不应该删除它的父类。


cuid 和 managed 都是 aspect,后者用附加元素扩展 entity. cuid aspect 将 UUID 类型的关键元素 ID 添加到 entity.


managed aspect 将创建和修改时间戳等字段添加到 entity 内。

我们按住 ctrl 键 + 左键,就能查看到这些 aspect 对应的实现:

image

CodeLists 可用于存储基于代码(例如货币、国家或语言)的全局可翻译定义。 特别是对于 UI,CodeList 可用于为某些输入字段提供值帮助。

Currency 定义是一种类型。 它定义了与货币实体的关联。 Currencies 实体基于 ISO 4217 并使用三个字母的字母代码作为键,例如 EUR 或 USD,并提供了存储相应货币符号(例如 € 或 $)的可能性。

在 service 定义里,将 domain model 里某些字段暴露出来:

image

下面我们需要将 domain model 部署到 sqllite 里。

首先使用命令行安装 sqlite

npm install --save-dev sqlite3

image


运行如下命令行,使用命令行将 domain model 初始化 sqlite:

cds deploy --to sqlite

image

下一步我们需要将 spring boot 应用同 sqlite 数据库建立关联关系。

打开 main/resources/application.yaml 文件:

image

---
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-app1.us10.trial.applicationstudio.cloud.sap/odata/v4/AdminService/Categories

image


相关文章
|
1天前
|
Java 关系型数据库 MySQL
【五一创作】嵌入式Sqlite数据库【基本语法、Sqlite-JDBC、嵌入到Java程序】
【五一创作】嵌入式Sqlite数据库【基本语法、Sqlite-JDBC、嵌入到Java程序】
|
22天前
|
SQL Java 关系型数据库
SQLite入门のjava创建库表
SQLite入门のjava创建库表
13 0
|
7月前
|
SQL 缓存 关系型数据库
【五一创作】嵌入式Sqlite数据库【基本语法、Sqlite-JDBC、嵌入到Java程序】
最近在用JavaFX做一个桌面软件需要用到数据库,但MySQL这种数据库明显只能本地访问,把软件移植到别的电脑上就不能运行了,即使能够嵌入到程序中也太大了(MySQL8.x占用内存大约700MB)。所以,嵌入式轻量级的数据库应运而生,但这种轻量级数据库不只有Sqlite,还有H2数据库等,但网上资料比较少,Sqlite用的人可能更多。
|
存储 Java 数据库
Java操作SQLite数据库
Java操作SQLite数据库
385 0
|
Java 数据库连接 mybatis
Java:MyBatis+SQLite使用实例
Java:MyBatis+SQLite使用实例
239 0
|
SQL XML 存储
Java 嵌入数据处理引擎:SQLite 的挑战者 esProc SPL
SQLite可以方便地嵌入Java,但数据源加载繁琐,计算能力不足,无法独立完成业务逻辑,架构上弱点颇多。SPL也很容易嵌入Java,且直接支持更多数据源,计算能力更强,流程处理方便,可独立实现业务逻辑。SPL还提供了多种优化体系结构的手段,代码既可外置也可内置于Java,支持解释执行和热切换,可进行高性能内存计算。
573 0
Java 嵌入数据处理引擎:SQLite 的挑战者 esProc SPL
|
存储 Java 数据库
Java操作SQLite数据库
Java操作SQLite数据库
575 0
|
SQL Java 数据库连接
|
SQL Java 数据库连接
sqlite - java 初学
进来准备使用一种embedded database,即嵌入式数据库,方便随项目本地存储。目前学习打算是sqlite和H2。 document:http://www.runoob.com/sqlite/sqlite-java.
799 0
热门文章
最新文章
推荐文章
更多