
回复
IBest-ORM 是一个专门为鸿蒙应用开发设计的简单易用的开源ORM工具库。基于SQLite数据库,它为鸿蒙开发者提供了一套完整的数据持久化解决方案,让数据库操作变得更加简单高效。
官方定位:一个简单易用的鸿蒙开源ORM工具库,基于 @ohos.data.relationalStore 定制的鸿蒙ORM工具库
# 通过npm安装
ohpm install @ibestservices/ibest-orm
import { GetIBestORM } from '@ibestservices/ibest-orm';
import { Table, Field, FieldType, Model } from '@ibestservices/ibest-orm';
import { relationalStore } from '@kit.ArkData';
@Table
export class User extends Model {
/**
* 名字
*/
@Field({ type: FieldType.TEXT })
Name?: string
/**
* 年龄
*/
@Field({ type: FieldType.INTEGER })
Age?: number
/**
* 没有被装饰器装饰的字段, 不会被映射成表字段,
*/
Salary?: number
constructor(name: string, age: number) {
super();
this.Name = name
this.Age = age
}
}
@Entry
@Component
export struct DemoPage {
private db = GetIBestORM();
onPageShow(){
this.db.AutoMigrate(User);
const user = new User("zhangsan", 18);
this.db.Create(user);
const valueBucket: relationalStore.ValuesBucket = {
Name: 'ming',
Age: 18,
};
this.db.Table("User").Insert(valueBucket);
// Or
// this.db.Session(User).Insert(valueBucket);
let result = this.db.Table("User").Where('age', 18).Find();
// ...
}
build(){}
}
支持灵活的自定义模型定义,通过装饰器轻松配置表结构:
@Table({name: 'posts'})
class Post {
@Field({ name: "id", type: FieldType.INTEGER, tag: ['primaryKey', 'autoIncrement', 'notNull'] })
id: number;
@Field({ type: FieldType.TEXT })
title: string;
@Field({ type: FieldType.TEXT })
content: string;
@Field({ type: FieldType.INTEGER })
userId: number;
}
支持完整的关系映射功能:
提供强大的查询构建功能:
// 复杂查询示例
const results = await this.db
.Select(['id', 'name', 'email'])
.Where('age', 18)
.Where('status', ['active', 'pending'])
.Or('vip_level', 3)
.OrderByDesc('created_at')
.Limit(20)
.Offset(10)
.Find();
确保数据操作的原子性:
this.db.Begin();
// 执行一系列数据库操作
let ref = new User("", 0, 0);
this.db.Table("User").Where('id', 1).First(ref);
if(this.db.GetError()) {
this.db.Rollback(); // 发生异常时回滚
} else {
ref.Name = "ZhangSan";
this.db.Save(ref);
if(this.db.GetError()) {
this.db.Rollback(); // 发生异常时回滚
} else {
this.db.Commit(); // 没有发生异常时提交
}
}
AutoMigrate 用于自动迁移您的表结构变化。AutoMigrate 会创建表、添加字段、修改字段和类型. 出于保护您数据的目的,它不会删除未使用的列。
export class User extends Model {
/**
* 名字
*/
@Field({ type: FieldType.TEXT })
Name?: string
/**
* 年龄
*/
@Field({ type: FieldType.INTEGER })
Age?: number
}
this.db.AutoMigrate(User);
IBest-ORM 是一个开源项目,欢迎参与社区贡献!
IBest-ORM 致力于为鸿蒙开发者提供最优秀的SQLite数据持久化解决方案。无论你是鸿蒙开发新手还是资深开发者,希望这篇文章能够帮助您更好地了解和使用 IBest-ORM,帮助你更高效地构建数据驱动的鸿蒙应用。