简介
Rdb操作简洁,以对象的方式操作数据库表,几乎不需要手写sql语句,特别是在数据库升级的时候,不用手写升级规则,直接操作对象即可
下载安装
ohpm install @rui/rdb
使用
一 建立表结构
1 新建表对象继承BaseTable
2 tableName注解在类上标记表名称
3 columnType注解在类成员上标记表字段类型
@tableName("t_person")
export class Person extends BaseTable {
@columnType(ColumnType.KEY_AUTO) // 主键自增 必须
id?: number;
@columnType(ColumnType.TEXT) // string
name?: string;
@columnType(ColumnType.INT) // 整型
age?: number;
@columnType(ColumnType.REAL) // 浮点
score?: number
@columnType(ColumnType.BOOLEAN) // 布尔
isMan?: boolean
// 构造方法必须 全部默认值
constructor(name: string = '', age: number = 0, score: number = 0.0, isMan: boolean = false ) {
super()
this.id = 0 // id 是主键自增 必须默认值为0
this.name = name;
this.age = age;
this.score = score
this.isMan = isMan
}
// 非必须
toString(): string {
return `Person { id: ${this.id}, name: ${this.name}, age: ${this.age},
score: ${this.score}, isMan: ${this.isMan}
`;
}
二 初始化数据库
在 EntryAbility 的 onCreate 方法中调用 Rdb.init 方法进行初始化
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);
// oh系统默认StoreConfig
const config: relationalStore.StoreConfig = {
name: "my_db",
securityLevel: relationalStore.SecurityLevel.S1,
};
const rdbConfig = new RdbConfig()
rdbConfig.version = 1 // 数据库版本号
rdbConfig.config = config // 默认StoreConfig
rdbConfig.tables = [Person] //tables 数据库表 如果多张表则在数组中追加
Rdb.init(this.context, rdbConfig) // 初始化
}
三 增查改删
1 增
async function insertPersons() {
// 单个新增
const p = new Person()
p.name = "张三丰"
p.age = 150
p.score = 99.9
p.isMan = true
await p.save()
// 批量新增
const list: Person[] = ...
await Rdb.saveList(list)
}
2 查
async function query() {
// 查询Person表中所有数据
const list: Person[] = await Rdb.findAll(Person)
// 查询表中name等于张三丰的的数据 注意string和bool 类型必须是 "'参数值'" 形式(注意!!!)
const data: Person = await Rdb.where("name = ?", "'张三丰'")
.findFirstOne(Person)
// 查询年龄大于10 且 分数大于 20的 数据
const pList= await Rdb.where("age > ? AND score > ?, "17", "20")
.find(Person)
// 查询 (年龄大于17且分数大于20) 或 性别为女 按照分数排序的数据 取前5条数据
const list = await Rdb.where("(age > ? AND score > ?) OR isMan = ?", "17", "20.0", "'false'")
.orderBy("score DESC")
.limit("5")
.find(Person)
}
3 改
async function update() {
const person: Person = await Rdb.where("name = ?", "'张三丰'")
.findFirstOne(Person)
if(person){
person.name = '张君宝'
await person.update(person.id)
}
}
4 删
async function update() {
// 单个删除
const person: Person = await Rdb.where("name = ?", "'张三丰'")
.findFirstOne(Person)
if(person){
await person.delete(person.id)
}
// 批量删除
const list: Person[] = ....
await Rdb.deleteList(list)
// 清空整个Person表数据
await Rdb.clearTable(Person)
}
四 数据库升级
升级很简单,只要在对象上新增或删除字段即可,然后增加数据库版本即可,新增表也是一样
_如 删除 Person 表 age 字段,新增 nickName 字段 又新增了一个新表 ___Book____
@tableName("t_person")
export class Person extends BaseTable {
@columnType(ColumnType.KEY_AUTO) // 主键自增 必须
id?: number;
@columnType(ColumnType.TEXT) // string
name?: string;
@columnType(ColumnType.TEXT) // string
nickName?: string;
@columnType(ColumnType.REAL) // 浮点
score?: number
@columnType(ColumnType.BOOLEAN) // 布尔
isMan?: boolean
// 构造方法必须 全部默认值
constructor(name: string = '', nickName: string = '', score: number = 0.0, isMan: boolean = false ) {
super()
this.id = 0
this.name = name;
this.nickName = nickName;
this.score = score
this.isMan = isMan
}
@tableName("t_book")
export class Book extends BaseTable {
@columnType(ColumnType.KEY_AUTO) // 主键自增 必须
id?: number;
@columnType(ColumnType.TEXT) // string
bookName?: string;
constructor(bookName: string = '') {
super()
this.id = 0
this.bookName = bookName;
}
修改数据库版本号 即完成数据库升级
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);
// oh系统默认StoreConfig
const config: relationalStore.StoreConfig = {
name: "my_db",
securityLevel: relationalStore.SecurityLevel.S1,
};
const rdbConfig = new RdbConfig()
rdbConfig.version = 2 // 数据库版本号+1
rdbConfig.config = config // 默认StoreConfig
rdbConfig.tables = [Person,Book] // 数据库表 新增Book表追加到tables集合中
Rdb.init(this.context, rdbConfig) // 初始化
}
github地址
https://github.com/ruirui1128/rdb