使用TypeORM进行跨数据库的ORM开发

糖果女孩 2019-10-20 ⋅ 21 阅读

TypeORM 是一个功能丰富的 TypeScript ORM(对象关系映射)框架,它允许我们使用面向对象的方式来进行数据库操作,在多个数据库之间切换也非常方便。本篇博客将介绍如何使用 TypeORM 进行跨数据库的 ORM 开发。

安装 TypeORM

首先,我们需要在项目中安装 TypeORM。在命令行中运行以下命令来安装 TypeORM 和相应的数据库驱动:

npm install typeorm reflect-metadata mysql

其中,我们这里以 MySQL 数据库为例,如果你使用的是其他数据库,可以相应地更换数据库驱动。

配置 TypeORM

接下来,我们需要进行 TypeORM 的配置。在项目的根目录下,创建一个名为 ormconfig.json 的文件,并将以下内容复制到文件中:

{
  "type": "mysql",
  "host": "localhost",
  "port": 3306,
  "username": "root",
  "password": "password",
  "database": "mydatabase",
  "entities": ["src/entity/**/*.ts"],
  "migrations": ["src/migration/**/*.ts"],
  "subscribers": ["src/subscriber/**/*.ts"],
  "cli": {
    "entitiesDir": "src/entity",
    "migrationsDir": "src/migration",
    "subscribersDir": "src/subscriber"
  }
}

这里我们使用了 MySQL 数据库,你可以根据实际情况修改为其他数据库类型,并填入相应的数据库连接信息。

注意:

  • entities 配置项用于指定包含实体类的文件夹路径。
  • migrations 配置项用于指定包含迁移文件的文件夹路径。
  • subscribers 配置项用于指定包含订阅者类的文件夹路径。

创建实体类

接下来,我们需要创建实体类,以便对数据库进行操作。在 src/entity 目录下创建一个名为 User.ts 的文件,并将以下代码复制到文件中:

import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";

@Entity()
export class User {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    firstName: string;

    @Column()
    lastName: string;

}

在上面的实体类中,我们使用了装饰器来定义了一个用户(User)实体,包含了 id、firstName 和 lastName 三个字段。根据实际需求,你可以自定义实体类的字段和方法。

创建数据库连接

在应用程序的入口文件(例如 index.ts)中,我们需要创建一个数据库连接。在文件顶部引入 typeormreflect-metadata,并添加以下代码:

import "reflect-metadata";
import {createConnection} from "typeorm";

createConnection().then(async connection => {
    // 这里是应用程序的入口点
    // 在这里进行数据库操作
}).catch(error => console.log(error));

createConnection() 被调用时,它将会读取 ormconfig.json 文件中的配置,并自动创建数据库连接。

进行数据库操作

现在,我们已经可以在应用程序中进行数据库操作了。在上面提到的 index.ts 文件中,我们可以在数据库连接成功的回调函数中进行数据库操作,例如:

import {User} from "./entity/User";

createConnection().then(async connection => {
    const userRepository = connection.getRepository(User);

    // 创建一个新的用户
    const user = new User();
    user.firstName = "John";
    user.lastName = "Doe";
    await userRepository.save(user);

    // 查询所有用户
    const users = await userRepository.find();
    console.log(users);

    // 更新用户信息
    user.firstName = "Jane";
    user.lastName = "Smith";
    await userRepository.save(user);

    // 删除用户
    await userRepository.delete(user.id);
}).catch(error => console.log(error));

在上面的示例中,我们通过调用 connection.getRepository(User) 来获取 User 实体对应的存储库(repository),并使用该存储库进行增删改查操作。

使用不同数据库

如果你需要在多个数据库之间切换,只需简单地修改 ormconfig.json 文件中的配置即可。例如,为了使用 PostgreSQL 数据库,只需将 type 属性修改为 postgres,同时修改连接信息为相应的 PostgreSQL 数据库的配置。

{
  "type": "postgres",
  "host": "localhost",
  "port": 5432,
  "username": "root",
  "password": "password",
  "database": "mydatabase",
}

结论

TypeORM 提供了强大的功能,使得跨数据库的 ORM 开发变得简单而容易。它支持多种数据库,提供了简洁的 API,可以轻松地创建实体类、数据库表以及进行数据库操作。通过合理使用 TypeORM,我们能够更高效地进行跨数据库的 ORM 开发。


全部评论: 0

    我有话说: