diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..f9cfc35 --- /dev/null +++ b/.npmignore @@ -0,0 +1,2 @@ +/.vscode +/node_modules \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e41f5ae --- /dev/null +++ b/README.md @@ -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)=> { + //事务内操作 +}); +``` diff --git a/package.json b/package.json index 7832972..bcdceee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "@yizhi/database", - "version": "1.0.0", + "name": "@yizhi/postgres", + "version": "1.0.1", "main": "dist/index.js", "types": "typing/index.d.ts", "scripts": {},