@yizhi/postgres
v1.0.4
Published
postgres数据库ORM
Downloads
122
Readme
yizhi-postgres
postgres数据库ORM
安装
npm install @yizhi/postgres
配置
使用database.config
函数来为数据库提供配置
import { database } from '@yizhi/postgres';
database.config(()=>({
host: "127.0.0.1",
port: 5432,
user: "postgres",
password: "your_password",
database: "your_database",
max: 100,
}));
实体定义
实体需继承自BasicEntity
类,使用@Table
装饰器来定义表格,使用@XXXColumn
来定义字段,使用@JoinOne
来定义一对一和多对一关系,使用@JoinMany
来定义一对多关系(多对多关系使用多对一和一对多来实现)。
import { StringColumn, IntColumn } from "@yizhi/database";
@Table("public.pets")
class Pet extends BasicEntity {
@IntColumn({ primary: true })
declare id: number;
@StringColumn()
declare name: string;
@IntColumn()
declare userID: number;
@JoinOne(()=>User, "userID")
declare user: User;
}
@Table("public.users")
class User extends BasicEntity {
@IntColumn({ primary: true })
declare id: number;
@StringColumn()
declare name: string;
@JoinMany(()=>Pet, "userID")
declare pets: Pet[];
}
可以使用Field
函数来定义自定义列类型, 例如:
import { Field } from "@yizhi/database";
/**
* 定义地址字段
* @param name 字段名称
*/
export function AddressColumn(name?: string) {
return Field(name, v => escapeValue(JSON.stringify(v)) + "::jsonb", v => new Address(v), false);
}
数据库操作
使用database.xxx
来进行数据库操作,例如:
import { database } from '@yizhi/postgres';
import { User } from './models/User';
//添加数据
await database.insert(User).data({name:"张三"}).returning("id").query(); // [{id:1}]
//添加多条数据
await database.insert(User).data([
{name:"李四"},
{name:"王五"}
]).returning("id").query(); // [{id:2},{id:3}]
//修改数据
await database.update(User).set({name:"王麻子"}).where({id:3}).returning("id","name").query(); // [{id:3, name:"王麻子"}]
//删除数据
await database.delete(User).where({id:2}).returning("id").query(); // [{id:2}]
//查询数据
await database.select(User)
.where({id:{gte:1}}) //查询条件 user.id>=1
.join("pets", pet=>pet.where({id:{gte:2}})) //一对多查询 user.pets.id>=2
.find(); // [{id:1, name:"张三", pets:[{id:2, name:"小狗"}]}, {id:3, name:"王麻子", pets:[{id:3, name:"小猫"}}]
//事务
await database.transaction(async (database)=> {
//事务内操作
});