在 Deno 中使用 TypeORM 管理数据库可以让我们在开发 Web 应用时更加方便地操作数据。TypeORM 是一个 TypeScript ORM(Object-Relational Mapping)框架,支持多种数据库,并提供了一系列便于操作数据库的 API。
安装和配置
安装 Deno
首先,我们需要安装 Deno。可以通过以下命令在终端中安装:
curl -fsSL https://deno.land/x/install/install.sh | sh
然后,需要将 Deno 的可执行文件添加到 PATH 中,以便系统在任何位置都可以找到该命令。
安装 TypeORM
然后,我们需要安装 TypeORM。可以通过以下命令在终端中安装:
npm i typeorm reflect-metadata
其中,reflect-metadata 是用于支持 TypeORM 的元数据功能的库,需要一起安装。
配置数据库连接
接下来,我们需要在项目目录中创建一个 ormconfig.json 文件来配置数据库连接。例如,我们将要连接的数据库是 MySQL,那么可以按如下配置:
// javascriptcn.com 代码示例 { "type": "mysql", "host": "localhost", "port": 3306, "username": "root", "password": "your-password", "database": "your-database-name", "synchronize": true, "logging": false, "entities": [ "src/entity/**/*.ts" ], "migrations": [ "src/migration/**/*.ts" ], "subscribers": [ "src/subscriber/**/*.ts" ] }
其中,entities 是指定数据库实体类所存放的目录,migrations 是指定数据库迁移脚本所存放的目录,subscribers 是指定数据库事件订阅器所存放的目录。
创建实体类
现在,我们可以为我们的数据库创建实体类(Entity)。例如,我们要创建一个 User 实体类来映射数据库中的 users 表:
// javascriptcn.com 代码示例 import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column() name: string; @Column() email: string; @Column() password: string; }
这里使用了 TypeORM 提供的装饰器来定义实体类和实体类的字段和类型。PrimaryGeneratedColumn 表示该字段是主键并自动生成,Column 表示该字段是列。
创建数据库迁移脚本
如果需要在数据库中新建表或修改表结构,我们可以使用 TypeORM 提供的迁移脚本(Migration Script)功能。可以通过以下命令创建一个新的迁移脚本:
npx typeorm migration:create -n createUsersTable
这会在 migrations 目录下自动生成一个迁移脚本文件 createUsersTable.ts。我们可以在该文件中编写 SQL 脚本来对数据库进行操作,例如:
// javascriptcn.com 代码示例 import { MigrationInterface, QueryRunner } from 'typeorm'; export class createUsersTable1613580092622 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise<void> { await queryRunner.query(` CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255), email VARCHAR(255), password VARCHAR(255) ) `); } public async down(queryRunner: QueryRunner): Promise<void> { await queryRunner.query('DROP TABLE users'); } }
其中,up 方法是在数据库升级时执行的操作,down 方法是在数据库降级时执行的操作。
操作数据库
通过以上步骤,我们已经完成了 Deno 中使用 TypeORM 管理数据库的基本配置。现在,我们可以开始使用 TypeORM 提供的 API 来操作数据库了。
连接数据库
首先,我们需要连接数据库。可以通过以下代码创建一个数据库连接:
import 'reflect-metadata'; import { createConnection } from 'typeorm'; createConnection().then((connection) => { console.log(`Connected to ${connection.options.database}!`); });
这里我们调用了 createConnection 方法,它会根据我们在 ormconfig.json 文件中的配置来创建一个数据库连接。
查询数据
查询数据可以使用 getRepository 方法来获取实体类对应的 Repository。例如,我们可以通过以下代码查询所有用户:
// javascriptcn.com 代码示例 import 'reflect-metadata'; import { createConnection } from 'typeorm'; import { User } from './entity/User'; createConnection().then(async (connection) => { const userRepository = connection.getRepository(User); const users = await userRepository.find(); console.log(users); }).catch((error) => console.log(error));
插入数据
插入数据可以直接创建一个实体类对象并保存到数据库中。例如,我们可以通过以下代码插入一条用户数据:
// javascriptcn.com 代码示例 import 'reflect-metadata'; import { createConnection } from 'typeorm'; import { User } from './entity/User'; createConnection().then(async (connection) => { const userRepository = connection.getRepository(User); const user = new User(); user.name = 'John Doe'; user.email = 'john.doe@example.com'; user.password = 'your-password'; await userRepository.save(user); }).catch((error) => console.log(error));
更新数据
更新数据可以通过查询并修改实体类对象后再保存到数据库中。例如,我们可以通过以下代码更新一条用户数据:
// javascriptcn.com 代码示例 import 'reflect-metadata'; import { createConnection } from 'typeorm'; import { User } from './entity/User'; createConnection().then(async (connection) => { const userRepository = connection.getRepository(User); const user = await userRepository.findOne(1); user.name = 'Jane Doe'; user.email = 'jane.doe@example.com'; await userRepository.save(user); }).catch((error) => console.log(error));
删除数据
删除数据可以通过查询并删除实体类对象后再保存到数据库中。例如,我们可以通过以下代码删除一条用户数据:
// javascriptcn.com 代码示例 import 'reflect-metadata'; import { createConnection } from 'typeorm'; import { User } from './entity/User'; createConnection().then(async (connection) => { const userRepository = connection.getRepository(User); const user = await userRepository.findOne(1); await userRepository.remove(user); }).catch((error) => console.log(error));
总结
通过以上步骤,我们已经掌握了在 Deno 中使用 TypeORM 管理数据库的基本操作。TypeORM 提供了很多便于操作数据库的 API,可以帮助我们更加高效地进行数据管理。
需要注意的是,TypeORM 目前还处于不断发展的过程中,可能会有些功能或 API 发生变化。因此,需要根据官方文档进行适当的调整和参考。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653a10cd7d4982a6eb3d4220