【鸿蒙优选三方库】@ohos/dataorm:让 HarmonyOS 的数据库操作告别手写 SQL

【鸿蒙优选三方库】@ohos/dataorm:让 HarmonyOS 的数据库操作告别手写 SQL

在鸿蒙应用里做数据持久化,还在为关系型数据库的 SQL 语句头疼?@ohos/dataorm 基于 Android 圈经典 greenDAO 思路打造,用注解定义实体 、一行代码操作数据库 、链式调用拼装查询------让你专注业务,告别样板 SQL。

  • 包名 :@ohos/dataorm
  • 当前版本:v2.3.10-rc.1
  • 协议:Apache License 2.0
  • 安装 :ohpm install @ohos/dataorm
  • 仓库 :gitcode.com/CPF-Applica...

一、它解决了什么问题?

HarmonyOS 应用做本地持久化,常见选择是关系型数据库(RDB)。但直接用原生 RDB Store,会遇到这些痛点:

  • 写 SQL 字符串拼装,易出错且难维护;
  • 表结构变更需要手动处理迁移;
  • 实体 ↔ 数据库映射全部手写;
  • 关联查询(一对多、多对一)写起来痛苦;
  • 批量操作缺乏统一封装;
  • 异步/同步命名混乱。

@ohos/dataorm 把 Java/Kotlin 圈最成熟的 greenDAO 思路搬进 HarmonyOS ArkTS:

  • 用 @Entity、@Id、@Column、@ToMany 等注解声明模型;
  • 编译期生成 Dao 类;
  • 链式 API 拼装查询;
  • 内置迁移、监听、缓存、批量操作工具。

二、核心特点

特性 说明
注解式实体定义 @Entity、@Id、@NotNull、@Unique、@Index 等
完整关联关系 @ToMany、@ToOne、@JoinEntity、@OrderBy
类型转换 @Convert 自定义类型 ↔ 数据库值转换
嵌套对象 @Embedded、@Transient、@Union
链式查询 inquiry().where().eq().and().like().list()
QueryBuilder 高级 去重、JOIN、分页、计数、排序
数据库迁移 Migration API,平滑升级表结构
监听器 表/库级别数据变更监听
多数据库 单应用支持多个数据库并存
异步/同步 统一 Async/Sync 命名后缀
DbUtils 工具 读取 rawfile 等常用工具方法

三、适用场景

  • 本地数据存储:用户信息、设置、配置、缓存。
  • 业务实体持久化:订单、商品、文章、聊天记录。
  • 复杂关联模型:一对多(用户-订单)、多对一(订单-商品)、多对多(标签-文章)。
  • 数据迁移需求:版本迭代时表结构平滑升级。
  • 需要监听变化:跨页面/跨组件响应数据变更。
  • 替代手写 SQL:减少样板代码与 SQL 注入风险。
  • 教学/参考:学习鸿蒙 ORM 的完整工程范式。

四、快速上手

1. 安装

bash 复制代码
ohpm install @ohos/dataorm

2. 定义实体(注解)

typescript 复制代码
import { Entity, Id, NotNull, Column, Index } from '@ohos/dataorm'

@Entity({ tableName: 'NOTE' })
export class Note {
  @Id()
  @Column({ columnName: 'ID' })
  id: number = 0

  @NotNull()
  @Column({ columnName: 'TEXT' })
  text: string = ''

  @Column({ columnName: 'COMMENT' })
  comment: string = ''

  @Column({ columnName: 'DATE' })
  date: number = 0
}

3. 初始化数据库

typescript 复制代码
import { DataORM, DatabaseOptions } from '@ohos/dataorm'

const options: DatabaseOptions = {
  name: 'notes.db',
  version: 1,
  entities: [Note]
}

const db = DataORM.init(options)

4. 获取 Dao 与基本 CRUD

typescript 复制代码
const noteDao = db.dao(Note)

// 新增
const note = new Note()
note.text = 'Hello HarmonyOS'
note.date = Date.now()
const id = await noteDao.insert(note)

// 查询
const list = await noteDao.queryBuilder()
  .where(Note.TEXT.like('%Hello%'))
  .orderDesc(Note.DATE)
  .list()

// 更新
note.text = 'Updated'
await noteDao.update(note)

// 删除
await noteDao.deleteById(id)

5. 关联查询(一对多)

typescript 复制代码
@Entity({ tableName: 'USER' })
class User {
  @Id() @Column({ columnName: 'ID' }) id: number = 0
  @Column({ columnName: 'NAME' }) name: string = ''
  @ToMany({ joinEntity: Order.class })
  orders: List<Order> = new List()
}

@Entity({ tableName: 'ORDER' })
class Order {
  @Id() @Column({ columnName: 'ID' }) id: number = 0
  @Column({ columnName: 'USER_ID' }) userId: number = 0
  @ToOne({ joinColumn: 'USER_ID' })
  user: User = new User()
}

五、亮点能力速览

  • 注解声明一切:实体、字段、主键、唯一、索引、关联,全部用装饰器表达。
  • 链式查询 :类 jOOQ 风格的 inquiry() 链,复杂条件也能优雅拼装。
  • JOIN 支持:QueryBuilder 原生支持多表连接查询。
  • 数据库迁移 :版本升级时声明 Migration,工具帮你做表结构变更。
  • 数据监听:表级 / 库级监听器,跨组件响应数据变化。
  • 多数据库并存:单应用可同时维护多个独立数据库。
  • Async/Sync 命名规范:异步同步接口统一后缀,约定清晰。

六、为什么值得选它?

  1. 节省样板代码:注解 + 编译期生成 Dao,让代码量下降一个数量级。
  2. 类型安全:ArkTS 强类型贯穿定义、操作、查询全链路。
  3. 迁移无忧:版本迭代最怕的"老用户数据库炸了",Migration API 帮你兜底。
  4. 关联模型原生:一对一、一对多、多对多都能优雅表达。
  5. 可观测可监听:数据变更触发回调,UI 联动不愁。

如果你的鸿蒙应用需要本地关系型存储,又不想与 SQL 字符串死磕到底------@ohos/dataorm 把 greenDAO 十多年沉淀的 ORM 思想搬到了 HarmonyOS,放心用。

相关推荐
fellow991 小时前
Electron + pnpm 在鸿蒙应用里跑起来
electron·harmonyos·openharmony·deepseek·deepseekharness
熊猫钓鱼>_>3 小时前
从闲置平板到家里的“控制大脑“:鸿蒙智慧中控面板完整实战
运维·人工智能·华为·自动化·电脑·ai编程·harmonyos
500843 小时前
React Native for OpenHarmony 实战:三方库 react-native-url-polyfill 的鸿蒙化适配指南
javascript·react native·react.js·性能优化·electron·harmonyos
熊猫钓鱼>_>6 小时前
从2D平铺到3D沉浸:我用HarmonyOS 7端侧AI做了一个全程数据不出设备的空间化私密相册
前端·人工智能·3d·华为·华为云·harmonyos·鸿蒙
m0_738185826 小时前
Flutter 鸿蒙化实战:foundation_fluttify 适配 OpenHarmony,Fluttify 桥接层
flutter·华为·harmonyos·鸿蒙
m0_738185826 小时前
Flutter 鸿蒙化实战:http_proxy 适配 OpenHarmony,HTTP 代理
flutter·http·华为·harmonyos·鸿蒙
m0_738185827 小时前
Flutter 鸿蒙化实战:headset_connection_event 适配 OpenHarmony,耳机插拔监听
flutter·华为·harmonyos·鸿蒙
500847 小时前
React Native for OpenHarmony 实战:三方库 react-native-volume-control 的鸿蒙化适配指南
javascript·react native·react.js·electron·harmonyos
李游Leo21 小时前
HarmonyOS 7 DualCart 平行视界适配实录 04:EasyGo × 虚拟容器:商品比价双详情与分栏比例策略【鸿蒙心迹】
华为·harmonyos
李游Leo21 小时前
HarmonyOS 7 PixelBridge 原生库适配实录 06:Release 性能基线、资源释放、包体积与工程化验收【鸿蒙心迹】
华为·harmonyos