数据库数据源
介绍
数据库数据源模块(database)提供本地数据库能力,基于 IBest-ORM 实现。它定义实体、数据源接口与实现,通过 repository 对外提供数据访问能力。
实体定义示例
文件位置:foundation/database/src/main/ets/entity/DemoEntity.ets
ts
import { Column, ColumnType, CreatedAt, PrimaryKey, Table, UpdatedAt } from "@ibestservices/ibest-orm";
/**
* @file Demo 表实体定义
*/
@Table({ name: "demo_items" })
export class DemoEntity {
/**
* 主键 ID
*/
@PrimaryKey({ autoIncrement: true })
id?: number;
/**
* 标题
*/
@Column({ type: ColumnType.TEXT })
title?: string;
/**
* 描述
*/
@Column({ type: ColumnType.TEXT })
description?: string;
/**
* 创建时间
*/
@CreatedAt()
createdAt?: string;
/**
* 更新时间
*/
@UpdatedAt()
updatedAt?: string;
}数据源接口示例
文件位置:foundation/database/src/main/ets/datasource/demo/DemoLocalDataSource.ets
ts
import { DemoEntity } from "../../entity/DemoEntity";
/**
* @file Demo 数据源接口
*/
export interface DemoLocalDataSource {
/**
* 新增记录
*/
createItem(title: string, description?: string): Promise<number>;
/**
* 更新记录
*/
updateItem(entity: DemoEntity): Promise<void>;
/**
* 删除记录
*/
deleteById(id: number): Promise<void>;
/**
* 清空表
*/
clearAll(): Promise<number>;
/**
* 查询全部
*/
getAllItems(): Promise<DemoEntity[]>;
/**
* 根据 ID 查询
*/
getItemById(id: number): Promise<DemoEntity | undefined>;
}数据源实现示例
文件位置:foundation/database/src/main/ets/datasource/demo/DemoLocalDataSourceImpl.ets
ts
import { getORM } from "@ibestservices/ibest-orm";
import { DemoEntity } from "../../entity/DemoEntity";
import { DemoLocalDataSource } from "./DemoLocalDataSource";
/**
* @file Demo 数据源实现
*/
export class DemoLocalDataSourceImpl implements DemoLocalDataSource {
private static migrated: boolean = false;
private orm = getORM();
constructor() {
this.ensureMigrated();
}
private ensureMigrated(): void {
if (!DemoLocalDataSourceImpl.migrated) {
this.orm.migrate(DemoEntity);
DemoLocalDataSourceImpl.migrated = true;
}
}
async createItem(title: string, description: string = ""): Promise<number> {
const entity = new DemoEntity();
entity.title = title;
entity.description = description;
return this.orm.insert(entity);
}
async updateItem(entity: DemoEntity): Promise<void> {
this.orm.save(entity);
}
async deleteById(id: number): Promise<void> {
this.orm.deleteById(DemoEntity, id);
}
async clearAll(): Promise<number> {
return this.orm.query(DemoEntity).delete();
}
async getAllItems(): Promise<DemoEntity[]> {
return this.orm.query(DemoEntity).find();
}
async getItemById(id: number): Promise<DemoEntity | undefined> {
const result = this.orm.query(DemoEntity).where("id", id).find();
return result[0];
}
}如何新增数据表
- 在
foundation/database/src/main/ets/entity/下新增实体类。 - 使用
@Table、@Column、@PrimaryKey等装饰器定义表结构。 - 在
datasource/下新增数据源接口与实现。 - 在
Index.ets中导出实体和数据源。 - 在 repository 中使用该数据源。
IBest-ORM 文档
详细数据库使用请参考官方文档:https://ibest-orm.ibestservices.com/
注意事项
- 数据库模块不直接给业务层使用,业务通过 repository 访问。
- 首次使用实体前需要调用
orm.migrate()完成建表。 - 数据源接口与实现分离,便于测试和替换。