TypeORM---增删改查
-TypeORM入门指南
一.安装
使用官方提供的CLI命令搭建项目
首先全局安装 TypeORM:
npm install typeorm -g
创建项目
typeorm init --name [MyProject] --database [mysql]
其中[MyProject] 为项目的名字,[mysql]为你将使用的数据库,可自行根据选择修改
database可配置的选项有mysql, mariadb, postgres, sqlite, mssql, oracle, mongodb, cordova, react-native, expo, nativescript。执行下面指令创建项目
typeorm init --name ormStudy --database mysql
此时项目结构
ormStudy
├── src // TypeScript 代码
│ ├── entity // 存储实体(数据库模型)的位置
│ │ └── User.ts // 示例 entity
│ ├── migration // 存储迁移的目录
│ └── index.ts // 程序执行主文件
├── .gitignore // gitignore文件
├── ormconfig.json // ORM和数据库连接配置
├── package.json // node module 依赖
├── README.md // 简单的 readme 文件
└── tsconfig.json // TypeScript 编译选项
安装依赖项
cd ormStudy
npm i
使用MySQL创建orm_test的数据库
CREATE SCHEMA `orm_test` ;
编辑ormconfig.json为自己的数据库链接
{
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "xxxx",
"database": "orm_test",
"synchronize": true,
"logging": false,
"entities": [
"src/entity/**/*.ts"
],
"migrations": [
"src/migration/**/*.ts"
],
"subscribers": [
"src/subscriber/**/*.ts"
],
"cli": {
"entitiesDir": "src/entity",
"migrationsDir": "src/migration",
"subscribersDir": "src/subscriber"
}
}
二.创建一个实体
创建一个实体首先需要创建一个模型,也就是数据库中的表,这里使用官方文档的案例模型Photo
export class Photo {
id: number;
name: string;
description: string;
filename: string;
views: number;
}
在数据库中,把每一类数据对象的个体称为实体。在typeorm中,实体是由@Entitiy装饰器装饰的模型
以Photo模型数据对象作为一个实体 简单介绍下下面使用到的装饰器
- @Entity 装饰为一个实体
- @Column 装饰为数据库列
- @PrimaryGeneratedColumn 可使id列自动生成
在src/entity下创建Photo.ts并写入
import { Entity, Column, PrimaryGeneratedColumn } from "typeorm";
@Entity()
export class Photo {
@PrimaryGeneratedColumn()//id列自动生成
id: number;
@Column({
length: 100,//列数据类型
})
name: string;
@Column("text")//列数据类型
description: string;
@Column()
filename: string;
@Column("double")//列数据类型
views: number;
@Column()
isPublished: boolean;
}
此时我们启动项目
npm start
打开MySQL查询此表创建成功
三.创建数据库连接
1.增
创建实体后,将src/index.ts的内容更改为下面ts代码后,再次启动此项目
import "reflect-metadata";
import { createConnection } from "typeorm";
import { Photo } from "./entity/Photo";
createConnection()
.then(async (connection) => {
let photo = new Photo();
photo.name = "Me and Bears";
photo.description = "I am near polar bears";
photo.filename = "photo-with-bears.jpg";
photo.views = 1;
photo.isPublished = true;
await connection.manager.save(photo);
console.log("Photo has been saved");
})
.catch((error) => console.log(error));
启动此项目
npm start
查看photo表,发现上面代码中photo对象的所有属性已经对应关系写入表中
2.查
将index.ts中被注释的部分更改为以下代码
/*
await connection.manager.save(photo);
console.log("Photo has been saved");
*/
const photos = await connection.manager.find(Photo);
console.log("photos: ", photos);
再次启动观察终端输出,可以得到刚刚输入至数据库的内容
3.改
现在我们尝试使用Repository而不是EntityManager,并将index.ts中这一部分更改为如下代码。注释中有重构EntityManager的方法
//增
/*
//更改前:
await connection.manager.save(photo);
console.log("Photo has been saved");
//更改后:
let photoRepository = connection.getRepository(Photo);
await photoRepository.save(photo);
console.log("Photo has been saved");
*/
//查
/*
//更改前:
const photos = await connection.manager.find(Photo);
console.log("photos: ", photos);
//更改后:
let photoRepository = connection.getRepository(Photo);
let savedPhotos = await photoRepository.find();
console.log("All photos from the db: ", savedPhotos);
*/
//改
let photoRepository = connection.getRepository(Photo);
let photoToUpdate = await photoRepository.findOne(1);
photoToUpdate.name = "Me, my friends and polar bears";
await photoRepository.save(photoToUpdate);
实现将id为1的photo的name更改为"Me, my friends and polar bears"
4.删
将index.ts中被注释的部分更改为以下代码
/*
let photoToUpdate = await photoRepository.findOne(1);
photoToUpdate.name = "Me, my friends and polar bears";
await photoRepository.save(photoToUpdate);
*/
let photoToRemove = await photoRepository.findOne(1);
await photoRepository.remove(photoToRemove);
启动后,这个id=1的photo在数据库中被移除了
至此,我们通过TypeORM操作MySQL完成了简单的增删改查
转载自:https://juejin.cn/post/6973181786859765768