📜  TypeORM-查询生成器(1)

📅  最后修改于: 2023-12-03 15:05:39.173000             🧑  作者: Mango

TypeORM查询生成器

TypeORM是一款基于TypeScript的ORM框架,它支持许多数据库(包括MySQL,PostgreSQL,Oracle,SQLite,MS SQL Server和MongoDB)和Node.js环境。TypeORM提供了强大的查询生成器,可以帮助程序员快速高效地操作数据库。

安装

你可以通过以下命令来安装TypeORM:

npm install typeorm --save
创建连接

首先,我们需要通过以下方式来创建数据库连接:

import { createConnection } from "typeorm";
const connection = await createConnection();

这里我们使用了TypeORM的createConnection方法来创建数据库连接,并通过await关键字来等待连接成功后再执行后续操作。

查询生成器

TypeORM的查询生成器基于实体类(Entity)和查询条件(Query)两个概念。

实体类(Entity)

实体类是映射到数据库表中的JavaScript类。我们可以在实体类中定义表的结构和字段等信息。例如,下面是一个简单的实体类定义:

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

@Entity()
class User {
    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

    @Column()
    age: number;
}

在上面的代码中,我们定义了一个名为User的实体类,它对应了一张名为users的表。@PrimaryGeneratedColumn@Column是TypeORM提供的装饰器,用于定义表的主键和字段。这里我们定义了一个主键id和两个字段nameage

查询条件(Query)

查询条件是指查询操作所需要的各种条件,例如WHERE条件、ORDER BY操作等等。

我们可以使用TypeORM的QueryBuilder来生成查询条件。例如,以下代码将返回一个所有年龄大于20岁的用户列表:

import { getConnection } from "typeorm";

const users = await getConnection()
    .createQueryBuilder()
    .select()
    .from(User, "user")
    .where("user.age > :age", { age: 20 })
    .getMany();

该方法使用getConnection()来获取数据库连接,然后调用.createQueryBuilder()来创建查询构造器实例,并通过.select()指定要查询的字段,通过.from()指定要查询的实体类和别名,最后通过.where()方法指定查询条件,并使用.getMany()方法执行查询并返回结果。

这种方式可以根据需要灵活组合各种查询条件,可以满足绝大部分的数据库查询需求。您可以查看官方文档了解更多使用方法。

代码示例

下面是一个完整的TypeScript示例代码,它实现了一个简单的CRUD操作,您可以直接运行它来了解查询生成器的使用方法。

import * as dotenv from "dotenv";
import { ConnectionOptions, createConnection, getConnection } from "typeorm";
import { User } from "./entity/User";

dotenv.config();

const options: ConnectionOptions = {
    type: "mysql",
    host: process.env.DB_HOST,
    port: Number(process.env.DB_PORT),
    username: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASE,
    synchronize: true,
    entities: [User],
};

async function run() {
    const connection = await createConnection(options);
    const { manager } = connection;

    // 插入数据
    const user = new User();
    user.name = "张三";
    user.age = 25;
    await manager.save(user);

    // 更新数据
    await manager.update(User, { name: "张三" }, { age: 26 });

    // 查询数据
    const users = await getConnection()
        .createQueryBuilder()
        .select()
        .from(User, "user")
        .where("user.age > :age", { age: 20 })
        .getMany();
    console.log(users);

    // 删除数据
    await manager.delete(User, { name: "张三" });

    await connection.close();
}

run().catch((error) => console.error(error));

注意,上述示例代码需要在.env文件中定义以下环境变量:

DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=password
DB_DATABASE=test
结语

使用TypeORM查询生成器可以帮助开发人员更加高效地操作数据库,提高开发效率。通过本文的介绍,相信您已经掌握了TypeORM查询生成器的基本用法,欢迎您在实际项目中尝试使用。