112 lines
2.5 KiB
Markdown
112 lines
2.5 KiB
Markdown
## yizhi-postgres
|
|
|
|
postgres数据库ORM
|
|
|
|
## 安装
|
|
|
|
```
|
|
npm install @yizhi/postgres
|
|
```
|
|
|
|
## 配置
|
|
|
|
使用`database.config`函数来为数据库提供配置
|
|
```typescript
|
|
|
|
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`来定义一对多关系(多对多关系使用多对一和一对多来实现)。
|
|
|
|
```typescript
|
|
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`函数来定义自定义列类型, 例如:
|
|
```typescript
|
|
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`来进行数据库操作,例如:
|
|
```typescript
|
|
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)=> {
|
|
//事务内操作
|
|
});
|
|
```
|