@zhinjs/database
zhin数据库封装
usage
- 新建入口文件,并键入如下代码
import {createDatabase, defineModel, useModel} from "@zhinjs/database";
import {createServer} from 'http'
import {DataTypes} from "sequelize";
// 1. 创建数据库
const db=createDatabase({
dialect:'sqlite',
storage:"sqlite.db",
scan_dir:'./models'// 自动扫描指定目录下的Model
})
- 选定一个目录作为Model存储目录(需与createTable传入的
scan_dir
路径一致) - 在目录内,使用Ts定义模型
import {BaseModel, Column, Model} from "@zhinjs/zhin";
import {DataTypes} from "sequelize";
@Model
export class Test extends BaseModel{
@Column(DataTypes.TEXT)
user_name:string
@Column(DataTypes.INTEGER)
age:number
}
- 更改入口,启动数据库
import {createDatabase, defineModel, useModel} from "@zhinjs/database";
import {createServer} from 'http'
import {DataTypes} from "sequelize";
// 1. 创建数据库
const db=createDatabase({
dialect:'sqlite',
storage:"sqlite.db",
scan_dir:'./models'// 自动扫描指定目录下的Model
})
db.start().then(async ()=>{
// 程序启动后,即可通过对应的model操作数据库
const test2Table=(await useTestModel)()
console.log(await useModel('test').findAll({
include:test2Table
}))
})
更多
在程序运行时,动态增加Model
import {defineModel} from "@zhinjs/database";
import {useModel} from "./database";
const useTest2Model = defineModel('test2', {
u_name: {type: DataTypes.TEXT},// 声明test2的u_name为文本类型
u_pass: {type: DataTypes.TEXT}
}, {
relation: { // 关系声明 可以不传 声明 当前model与test为1对多关系,具体参考sequelize
model: 'test',
relate: 'belongsTo'
}
})
const test2 = await useTest2Model() // 获取test2这个Model
const test=useModel('test') // 获取test这个Model
test2.findAll({include: test}) // 查询test2的所有结果,并关联查询出test
(注意):动态声明的表,需使用await才能正确获取,