增加README
This commit is contained in:
111
README.md
Normal file
111
README.md
Normal file
@ -0,0 +1,111 @@
|
||||
## 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)=> {
|
||||
//事务内操作
|
||||
});
|
||||
```
|
Reference in New Issue
Block a user