更新记录

1.0.0(2024-12-27)

  1. 自研uts本地数据库ORM首次发布

平台兼容性

Vue2 Vue3
×
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.6.8,Android:支持,iOS:不支持,HarmonyNext:不支持 × × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序 鸿蒙元服务
× × × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
× × × × × × × × ×

logo

UxORM 1.0.0

基于UTS开发的本地数据库ORM插件

特别说明

本插件不支持授权购买,仅支持源码购买,否则功能无法正常使用!

目前仅支持android,后续版本支持ios

说明

通过链式调用实体对象,零SQL对本地数据库进行增删改查!

  • 实体映射
  • 类型映射(string, boolean, int, double, float, long, short, blob, timestamp, datetime, json)
  • 主键
  • 默认值
  • 别名
  • 运算符( =, !=, >, >=, <. <=, like, not like, in, not in, between, not between, is null, is not null)
  • 排序(ASC, DESC)
  • 分页
  • 表结构自动升级
  • 删表
  • 删库跑路
  • 插入(insert)
  • 批量插入(inserts)
  • 删(delete)
  • 改(update)
  • 查(query)
  • 行数(count)
  • 支持 select
  • 支持 groupBy
  • 支持 having
  • 支持原生sql
  • 支持实体数据集
  • 支持json数据集

定义表结构


import { Table, TableColumn, Column } from '@/uni_modules/ux-orm'

export class UserColumn extends TableColumn {

    readonly id = Column.int('id').primaryKey()
    readonly uuid = Column.string('uuid')
    readonly nickname = Column.string('nickname').aliased('name')
    readonly phone = Column.string('phone')
    readonly avatar = Column.blob('avatar')
    readonly sex = Column.short('sex').default(1)
    readonly age = Column.int('age')
    readonly vip = Column.boolean('is_vip').default(false)
    readonly extInfo = Column.json('ext_info').default({'city': '北京'})
    readonly createAt = Column.datetime('create_at').default(new Date())
    readonly updateAt = Column.timestamp('update_at')

    public constructor() {
        super()
    }
}

实体映射


export class UserTable extends Table {
    // 覆写表名称
    override name = 'tb_user'
    // 覆写表结构
    override columns: TableColumn = new UserColumn()

    // 字段映射
    public id ?: number = null
    public uuid ?: string = null
    public nickname ?: string = null
    public phone ?: string = null
    public avatar ?: ByteArray = null
    public sex ?: number = null
    public age ?: number = null
    public vip ?: boolean = null
    public extInfo ?: UTSJSONObject = null
    public createAt ?: Date = null
    public updateAt ?: number = null

    public constructor() {
        super()
    }
}

操作数据库之前需先初始化数据库


orm.openDatabase({
    database: 'app.db',
    success: (res: orm.UxOrmSuccess) => {
        uni.showToast({
            title: 'open db success',
            icon: 'none'
        })
    }
} as orm.OpenDatabaseOptions)

insert


let user = new UserTable()

user.uuid = '1'
user.nickname = '老6'
user.phone = ''
user.avatar = new ByteArray(1)
user.sex = 1
user.age = 16
user.vip = true
user.extInfo = {
    'province': '北京',
    'city': '北京'
}
user.updateAt = new Date().getTime()
user.createAt = new Date()

// 返回行id
let id = user.insert()

update


let user = new UserTable()
user.nickname = '老登'

// 返回影响行数
let columns = user.columns as UserColumn
let i = user.where(columns.id.eq(2))
            .update()

delete


let user = new UserTable()

// 返回影响行数
let columns = user.columns as UserColumn
let i = user.where(columns.id.eq(2)).delete()

count


let user = new UserTable()
let columns = user.columns as UserColumn

// 返回满足条件的总行数
let count = user.where(columns.age.eq(15))
                .count()

query


let user = new UserTable()
let columns = user.columns as UserColumn

// 返回实体数据集
let datas = user.orderBy(columns.id.desc())
    .where(columns.nickname.like('老6%'))
    .query<UserTable>()

// 返回json数据集
let datas = user.orderBy(columns.id.desc())
    .where(columns.age.between(16, 25))
    .fromJson()
    .query<UTSJSONObject>()

// 先查询后过滤并打印
user.orderBy(columns.id.desc())
    .where(columns.nickname.like('老6%'))
    .query<UserTable>()
    .filter((e): boolean => {
        return e.age < 16
    })
    .forEach(e => {
        console.log(e)
    })

// 分页查询
let datas = user.orderBy(columns.id.desc())
    .where(columns.age.between(16, 25))
    .or(columns.nickname.like('老6%'))
    .paging(0, 10)
    .pagingInfo(pageInfo => {
        // 分页信息
        console.log(pageInfo);
    })
    .query<UTSJSONObject>()

// 分组查询
let datas = user.orderBy(columns.id.desc())
    .where(columns.age.between(16, 25))
    .or(columns.nickname.like('老6%'))
    .groupBy(columns.id.getName())
    .having(columns.id.gte(2))
    .fromJson()
    .query<UTSJSONObject>()

文档教程 ⬇️

https://www.uxframe.cn

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问