ORM (Object Relation Model)
ORM 把数据库映射成对象。
数据库的表(table) --> 类(class)
记录(record,行数据)--> 对象(object)
字段(field)--> 对象的属性(attribute)复制代码
typeORM默认支持Typescript,支持关联,支持事务,支持数据库迁移。
启动PostgreSQL
自行安装docker哦
docker run -v "blog-data":/var/lib/postgresql/data -p 5432:5432 -e POSTGRES_USER=blog -e POSTGRES_HOST_AUTH_METHOD=trust -d postgres:12.2
docker exec -it 容器id bash//进入容器
psql -U blog -W//没有设置密码直接回车进入
pg命令
\l 查看数据库
\c 连接数据库
\dt 进入表
复制代码
创建数据库
用SQL来创建数据库,因为TypeORM没有单纯提供创建数据库的API
我们需要创建三个数据库:开发(develpoment)、测试(test)、生产(production)
//命令
CREATE DATABASE DataBaseName ENCODING 'UTF8' LC_COLLATE 'en_US.utf8' LC_CTYPE 'en_US.utf8';
复制代码
安装TypeORM
项目中安装以下依赖
yarn add typeorm
yarn add reflect-metadata
yarn add @types/node
yarn add pg
复制代码
配置tsconfig
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
复制代码
运行typeORM
记得先git add
./node_modules/.bin/typeorm init --database postgres
git checkout HEAD -- .gitignore//恢复gitignore的内容,因为init会覆盖
git checkout HEAD -- package.json//恢复package的内容
git checkout HEAD -- tsconfig.json//恢复package的内容
复制代码
以next.js为例,部分框架内置了babel来将TS编译为JS,TypeORM推荐使用ts-node 来编译,这两者对TS的支持并非完全一致,所以我们要进行统一(全部使用babel),其它的框架可以查找对应的解决方式。
//新建.babelrc 配置如下
//要安装插件哦
{
"presets": [
"next/babel"
],
"plugins": [
[
"@babel/plugin-proposal-decorators",
{
"legacy": true
}
]
]
}
复制代码
运行 npx babel ./src --out-dir dist --extensions ".ts,.tsx" 编译
可能会遇到报错,自己根据报错调整配置文件!可对比源码查看
node dist/index.js
ormconfig.json修改配置
"synchronize": false,如果为true,那么在链接数据库时,typeorm会自动根据entity目录来修改数据表,看起来很方便,但该功能可能会在我们修改User的时候造成数据丢失。
复制代码
windows同时运行两个任务npm run tasks in parallel
yarn add --dev concurrently
package.json 配置scripts格式("concurrently \"task 1\" \"task 2\"")
"dev": "concurrently \"next dev\" \"babel -W ./src --out-dir dist --extensions .ts,.tsx\"",//例子
复制代码
创建表
npx typeorm migration:create -n CreatePost
//在migration目录中会生成一个接口文件
复制代码
数据映射到实体
以上大多是配置,只是在数据库中创建了Post,下面将数据映射到Entity
typerom entity:create -n Post
复制代码
。。。。。未完待續