## 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)=> { //事务内操作 }); ```