本示例的演示是在Electron主线程中编写,由于浏览器环境的限制,realm依赖无法在Web端构建。当然如果需要在web端使用数据库存储,可以安装realm-web依赖。
yarn add realm
import Realm, { ObjectSchema } from "realm";
export class UserModel extends Realm.Object<UserModel> {
_id: number;
uuid: string;
name: string;
username: string;
header: string;
group?: string | null;
email?: string;
static schema: ObjectSchema = {
name: "User",
properties: {
_id: "int",
uuid: "string",
name: "string",
username: "string",
header: "string",
// 表示group和email是可选的,可以为string 可以为null
group: {type: "string", optional: true},
email: {type: "string", optional: true},
},
// 主键为_id
primaryKey: "_id",
};
}
import Realm from "realm";
import {UserModel} from "./model";
class DB {
private realm: Realm;
constructor() {
this._open()
}
async _open() {
// 打开数据库 获取实例后方可进行增删改查操作
this.realm = await Realm.open({
// 可以传入多个数据模型
schema: [UserModel]
});
}
_close() {
// 关闭数据库的连接,防止内存溢出
this.realm.close();
}
getUsers(queryForm) {
// 获取User中所有的数据
return this.realm.objects<UserModel>("User");
// 当然也可以实现条件筛选
const userList = this.realm.objects<UserModel>("User");
return userList.filtered(`uuid = ${queryForm.uuid}`);
// 分页
const {pageNumber, pageSize} = queryForm;
const start = pageNumber * pageSize;
const end = (pageNumber + 1) * pageSize;
const userList = realm.objects<UserModel>("User").sorted("_id").slice(start, end);
return userList;
}
addUser(user) {
try {
// 获取最后一项数据的ID 加1作为新数据的ID
user._id = this.realm.objects<UserModel>("User").sorted("_id", true)[0]._id + 1 || 1;
this.realm.write(() => {
this.realm.create("User", user);
})
return true
} catch (e) {
return false
}
}
deleteUser(uuid) {
try {
// 从数据库中获取要删除的数据,可以是多个
const user = this.realm.objects<UserModel>("User").filtered(`uuid == ${uuid}`);
this.realm.write(() => {
// 进行删除操作
this.realm.delete(user);
})
return true
} catch (e) {
return false
}
}
updateUser(params) {
try {
this.realm.write(() => {
// 获取需要修改的数据
const user = this.realm.objects<UserModel>("User").filtered(`uuid == ${user.uuid}`);
// 修改后内容会被保存到realm数据库中
user.name = params.name
user.age + 1
})
return true
} catch (e) {
return false
}
}
}
export default new DB();
最后new一个DB实例对象,返回出去,别的文件引入后即可调用相关的增删改查方法。