0.0.17 • Published 1 year ago

iorm v0.0.17

Weekly downloads
-
License
MIT
Repository
-
Last release
1 year ago

简体中文|English

介绍

IORM 是 IndexedDB 工具包和对象关系映射器,提供了 IndexdbDB 的全部功能,具有灵活性。

安装

npm install iorm

# OR

yarn add iorm

快速开始

创建数据库模型

import {
    DB,
    BaseModel,
    ArrayField,
    KeyPathField,
    InteagerField,
    StringField,
    BooleanField
} from 'iorm'

let db = new DB({
    name: 'dbname',
    version: 1,
})

class User extends BaseModel {
    constructor() {
        super({ db: db, store: {name: 'user_store'} })  // store_name: 存储对象名
    }
    id = KeyPathField({ key_path_name: '_id', auto_increment: true })  // key_path_name: 主键名,默认字段名
    username = StringField({ verbose_name: '用户名', nullable: false, unique: true, index: 'name_index' })
    password = StringField({ verbose_name: '密码', nullable: false, unique: false, index: 'name_index' })
    activate = BooleanField({ default: true, unique: false, index: 'activate_index' })
    hobbies = ArrayField({ default: ['football', 'basketball'], unique: false, index: 'hobbies_index' })
}

创建数据库

let count = await init({
    models: [User]
})
console.log(`${count} stores created or updated`)

添加数据

const user = new User()
user.username = 'admin'
user.password = '123456'
user.hobbies = ['football']

user.insert()  // 主键不能重复,auto_increment: true 自动生成
// OR
user.save()  // 主键重复则修改数据

查询数据

const query = User.find()  // find 等价于 find_many
query = query.where({ activate: true })  // filter: 过滤条件
// OR
const query = User.where({ activate: true })  // 或直接使用 filter

query = query.exclude({ username: 'admin' })  // exclude: 排除条件

query = query.skip(10)  // 跳过 10 条数据
query = query.limit(10)  // 查询 10 条数据

console.log(query.all())
const query = User.find_one({username: 'admin'})
console.log(query.json())

修改数据

const user = User.find().where({ username: 'admin', activate: true }).obj() // obj|object: 获取一条数据实例
if (user) {
    query.username = 'admin2'
    query.save()
}

const users = User.find().where({ username: 'admin', activate: true }).objs() // objs|objects: 获取多条数据实例
users.forEach(user => {
    user.username = 'admin2'
    user.save()
})

删除数据

const res = User.find().where({ username: 'admin', activate: true }).delete()
console.log(res)  // 返回被删除的数据

内置类型

export interface FieldProperty {
    verbose_name?: string
    nullable?: boolean
    default?: any[]
    unique?: boolean
    index?: string | false
}
字段名类型必须默认值描述
verbose_namestringN''字段描述
nullablebooleanNfalse是否允许为空
defaultanyN默认值,根据字段类型有不同的默认值
uniquebooleanNfalse唯一
indexstring 或 falseNfalsestring: 索引名;false: 不创建索引
field_namestringNundefinedindexeddb 中字段名映射
export interface IORMConfigDatabase {
    db_name: string
    db_version: number | null | undefined
}

export interface IORMConfigStore {
    store_name: string | null | undefined
}

export interface IORMConfigSetting {
    default_type: 'data' | 'object' | 'key'
}

export interface IORMConfig {
    db: IORMConfigDatabase
    store?: IORMConfigStore | null | undefined
    setting?: IORMConfigSetting | null | undefined
}

字段类型

KeyPathField(property: FieldProperty): Field

InteagerField(property: FieldProperty): Field  // default: 0
StringField(property: FieldProperty): Field  // default: ''
BooleanField(property: FieldProperty): Field  // default: true
ArrayField(property: FieldProperty): Field  // default: []
ObjectField(property: FieldProperty): Field  // default: {}

Model 实例方法

/**
 * 获取该对象的 json 数据
 * @returns {Promise<any>}
 */
json(): Promise<any>

/**
 * 获取该对象数组的所有 json 数据
 * @returns {Promise<any[]>}
 */
all(): Promise<any[]>

/**
 * 获取字段值
 * name 字段名
 * @returns {Promise<any>}
 */
get(name: string): Promise<any>

/**
 * 保存数据,keypath 不存在则新建数据
 * ret {'id' | 'data' | 'object'} [default: 'id'] 返回数据类型,keypath|json|object
 * @returns {Promise<any>}
 */
save(ret: 'id' | 'data' | 'object' = 'id'): Promise<any>

/**
 * 新建数据
 * ret {'id' | 'data' | 'object'} [default: 'id'] 返回数据类型,keypath|json|object
 * @returns {Promise<any>}
 */
insert(ret: 'id' | 'data' | 'object' = 'id'): Promise<any>

Model 类方法

/**
 * 新建数据
 * data {object} 数据 (只取模型中定义的数据)
 * ret {'id' | 'data' | 'object'} [default: 'id'] 返回数据类型,keypath|json|object
 * @returns {Promise<any>}
 */
insert(data: object, ret: 'id' | 'data' | 'object' = 'id'): Promise<any>

/**
 * 返回 QuerySet
 * @returns {QuerySet}
 */
find(): QuerySet
find_many(): QuerySet

/**
 * 查询条件
 * @returns {QuerySet}
 */
where(filter: object = {}): QuerySet

/**
 * 排除条件
 * @returns {QuerySet}
 */
exclude(exclude: object): QuerySet

/**
 * 跳过数据条数
 * @returns {QuerySet}
 */
skip(skip: number): QuerySet

/**
 * 查询数据条数
 * @returns {QuerySet}
 */
limit(limit: number): QuerySet

/**
 * 排序,next | 1 : 正序; prev | -1 : 倒序
 * 当前只支持一个排序字段
 * @returns {QuerySet}
 */
order(order: object = null): QuerySet

/**
 * 字段过滤 1: 过滤; 其他: 不过滤
 * @returns {QuerySet}
 */
filter(filter: object = null): QuerySet

/**
 * 获取符合条件的所有数据
 * @returns {Promise<any>}
 */
all(): Promise<any>

/**
 * 获取一条数据
 * @returns {Promise<any>}
 */
json(): Promise<any>

/**
 * 获取一条数据实例
 * @returns {Promise<any>}
 */
obj(): Promise<any>
object(): Promise<any>

/**
 * 获取多条数据实例
 * @returns {Promise<any>}
 */
objs(): Promise<any>
objects(): Promise<any>

/**
 * 删除数据
 * @returns {Promise<any>}
 */
delete(): Promise<any>

/**
 * 动态设置数据库名,null | undefined 获取数据库名
 * @returns {QuerySet | string}
 */
db(val: string | IORMConfigDatabase | null | undefined = null): QuerySet | string

/**
 * 动态设置仓库名,null | undefined 获取仓库名
 * @returns {QuerySet | string}
 */
store(val: string | IORMConfigStore | null | undefined = null): QuerySet | string

QuerySet 实例方法

/**
 * 新建数据
 * data {object} 数据 (只取模型中定义的数据)
 * ret {'id' | 'data' | 'object'} [default: 'id'] 返回数据类型,keypath|json|object
 * @returns {Promise<any>}
 */
insert(data: object, ret: 'id' | 'data' | 'object' = 'id'): Promise<any>

QuerySet 类方法

/**
 * 查询条件
 * @returns {QuerySet}
 */
where(filter: object = {}): QuerySet

/**
 * 排除条件
 * @returns {QuerySet}
 */
exclude(exclude: object): QuerySet

/**
 * 跳过数据条数
 * @returns {QuerySet}
 */
skip(skip: number): QuerySet

/**
 * 查询数据条数
 * @returns {QuerySet}
 */
limit(limit: number): QuerySet

/**
 * 排序,next | 1 : 正序; prev | -1 : 倒序
 * 当前只支持一个排序字段
 * @returns {QuerySet}
 */
order(order: object = null): QuerySet

/**
 * 字段过滤 1: 过滤; 其他: 不过滤
 * @returns {QuerySet}
 */
filter(filter: object = null): QuerySet

/**
 * 获取符合条件的所有数据
 * @returns {Promise<any>}
 */
all(): Promise<any>

/**
 * 获取一条数据
 * @returns {Promise<any>}
 */
json(): Promise<any>

/**
 * 获取一条数据实例
 * @returns {Promise<any>}
 */
obj(): Promise<any>
object(): Promise<any>

/**
 * 获取多条数据实例
 * @returns {Promise<any>}
 */
objs(): Promise<any>
objects(): Promise<any>

/**
 * 动态设置数据库名,null | undefined 获取数据库名
 * @returns {QuerySet | string}
 */
db(val: string | IORMConfigDatabase | null | undefined = null): QuerySet | string

/**
 * 动态设置仓库名,null | undefined 获取仓库名
 * @returns {QuerySet | string}
 */
store(val: string | IORMConfigStore | null | undefined = null): QuerySet | string
0.0.12

2 years ago

0.0.13

2 years ago

0.0.14

2 years ago

0.0.15

2 years ago

0.0.16

2 years ago

0.0.17

1 year ago

0.0.11

2 years ago

0.0.10

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago