简介
dataORM 是一个轻量级 ORM(对象关系映射)库,用于简化本地数据库的操作。提供了高效的数据库访问性能和低内存消耗。dataORM 支持多线程操作、链式调用、备份、升级、缓存等特性等功能。其设计理念是轻量、快速且易于使用,帮助开发者快速构建高性能的应用程序。
效果展示
下载安装
OpenHarmony ohpm 环境配置等更多内容,请参考 如何安装 OpenHarmony ohpm 包
使用说明
- 创建实体类,如Note
注解对外开放部分:Column、Entity、Id、NotNull、Unique、Index、ToMany、ToOne、JoinEntity、OrderBy、Convert、Embedded、Transient。
可使用注解使用示例及说明:
(1)Id的使用:
1、导入引用
2、使用方式:
A、
B、
说明:在类属性中使用,定义表主键和键值是否是自增长。A和B的定义方式等同,isPrimaryKey值为true(是表主键),autoincrement值为false(不为自增长)
(2)Entity的使用:
1、导入引用
2、使用方式:
说明:在类头使用,定义表表名,如该示例定义为表名为NOTE。
####(3)Column的使用:
1、导入引用
2、使用方式:
说明:在类属性中使用,定义在表中的列名和列类型。第一个参数为列名,第二个参数为列的数据类型
(4)NotNull的使用:
1、导入引用
2、使用方式:
A、
B、
说明:在类属性中使用,定义在表中该列是否可空,当为true值时,在表中该列值为非空值。其中A和B的定义方式等同,该列为非空值。
####(5)Unique的使用:
1、导入引用
2、使用方式:
A、
B、
说明:在类属性中使用,定义在表中该列是否是唯一值,当为true值时,在表中该列值为唯一值。其中A和B的定义方式等同,该列为唯一值。
####(6)Index的使用:
1、导入引用
2、使用方式:
A、
B、
c、
说明:在类属性中使用,定义创建索引表的列以及是否是唯一,当为true值时,为唯一。其中A定义为非唯一索引,B的定义为唯一索引,C定义为非唯一索引.A和C的定义等同。
####(7)ToMany的使用
1、导入引用
2、使用方式:
说明:在类属性中使用,定义了目标关系表 targetClsName, 当前要查询的列 name 与外部目标表关联的列名 referencedName ,其中的name的值是目标referencedName的值 , 返回的是目标的表的对象数组。
调用时方式:
说明: 获取目标表的Dao , 调用queryToManyListByColumnName(toManyColumnName: string, arr: string[]), 传入参数toManyColumnName为当前表所创建类的@ToMany下面的变量名,传入参数arr为关联列的查询值。
(8)JoinEntity的使用
1、导入引用
2、使用方式
说明:在类属性中使用,定义了联接表之间的关系, entityName 为链接表的实体类名称, targetClsName 目标表的实体类, sourceProperty为连接实体中包含源(当前)实体id的属性的名称 ,targetProperty 为连接实体中包含目标实体id的属性的名称 , 返回的是目标的表的对象数组。
调用时方式:
说明: 获取目标表的Dao , 调用queryToManyListByColumnName(toManyColumnName: string, arr: string[]), 传入参数toManyColumnName为当前表所创建类的@ToMany下面的变量名,传入参数arr为关联列的查询值。
####(9)ToOne的使用
1、导入引用
2、使用方式
说明:在类属性中使用,定义了当前表 value为关联的列,targetObj 为关链创建的表的类。
调用时方式:
A、
B、
说明: 获取目标表的Dao,拼接查询Sql 作为queryDeep(where: string, selectionArg: string[])的参数去查询。
####(10)Convert的使用
1、导入引用
2、使用方式
说明:在类属性中使用,将对应的属性的集合或者数组,在数据库中存储与取出的操作,@Convert其参数说明:converter:继承PropertyConverter实体,实现其抽象方法;columnType:对应存储到数据库中的类型
PropertyConverter方法介绍:
接口名 | 功能描述 |
convertToEntityProperty(databaseValue: Q): P | 将数据库数据转化成对应的集合或者数组 |
convertToDatabaseValue(entityProperty: P): Q | 将对象实体中集合或者数组数据转换为数据库存储的类型 |
####(11)Transient的使用
1、导入引用
2、使用方式
说明:Transient注解修饰的属性不会映射到数据库中
####(12)Embedded的使用
1、导入引用
2、使用方式
说明:Embedded注解:数据实体嵌套的功能,其参数说明,prefix:实体中对应数据库中列名的前缀定义,targetClass:对应嵌套的实体
1. 非加密库在AbilityStage.ts进行初始化
2. 加密库在AbilityStage.ets进行初始化
3. 获取daoSession和Dao对象:在调用页面,如demo中的index页中
4. 添加和移除监听
5. 数据库操作
6.实体继承
您可以通过使用实体继承模式降低代码编写的冗余度,实现代码的重用,提高程序的可维护性。
1、定义一个基类,把公共属性放在基类中,并使用 @Columns 标记。
2、在需要的业务实体中继承基类。
通过上述示例,得到的NOTE实例中就可以继承createTime属性。
接口说明
接口准备
- 新增
noteDao.insert(note)
- 修改
noteDao.update(note)
- 删除
noteDao.delete(note)
- 主键删除
noteDao.deleteByKey(id)
- 条件删除
noteDao.queryBuilder().where(properties['text'].eq("bbb")).buildDelete()
- 查询
noteDao.queryBuilder().list()
- 条件查询
noteDao.queryBuilder.whereOr(properties['text'].eq("aaa"), properties['text'].eq("bbb"), properties['text'].eq("ccc")).list()
- 缓存查询
noteDao.load(id)
- 更新数据,通过从数据库重新加载值来重置实体的所有本地更改的属性
noteDao.refresh(note)
- 链式查询
new inquiry().from(Note).query(Note).then((data) => { if(data)this.arr = data; })
- 链式条件查询
inquiry().from(Note).eq("ID", 2).querySingle(Note).then((data) => {if(data) this.arr = data; })
- 添加监听
noteDao.addTableChangedListener()
- 移除监听
noteDao.removeTableChangedListener()
- 保存(无则新增,有则更新)
noteDao.save(note)
- 备份数据库
Migration.backupDB(dbName, tableName, version, context)
- 升级数据库
migration.execute(context)
- 数据库从资源文件导入数据
executeSqlScript(resourceMgr: any, db: Database, rawFilename: string)
- 原始sql语句查询
rawQueries(sql: string, selectionArgs: Array<any>)
- ToMany 查询
queryToManyListByColumnName(toManyColumnName: string, arr: string[])
- JoinEntity
queryToManyListByColumnName(toManyColumnName: string, arr: string[])
- ToOne 查询
queryDeep(where: string, selectionArg: string[])
单元测试用例详情见 TEST.md
约束与限制
- DevEco Studio: 4.1 Release(4.1.3.317), SDK: API11 (4.1.0.36)
- DevEco Studio: 4.0 Release(4.0.3.513), SDK: API10 (4.0.10.10)
- DevEco Studio 版本:4.0 Release(4.0.3.418),OpenHarmony SDK:(4.0.10.6)
目录结构