返回

Typeorm + Midway:动态建表查询一站式方案

前端

在 Midway 中使用 Typeorm 进行动态建表和数据查询

简介

Midway 是一个基于 Egg.js 的全栈开发框架,它集成了一系列强大的特性,其中包括对象关系映射(ORM)支持。Typeorm 是一个流行的 ORM 库,可以帮助我们轻松高效地操作数据库。本文将深入探讨如何在 Midway 中使用 Typeorm 来实现动态建表和数据查询。

环境准备

在开始之前,我们需要安装 Midway 和 Typeorm:

npm install @midwayjs/core
npm install typeorm

然后,使用 Midway CLI 创建一个新的项目:

midway new my-app

配置 Typeorm

config/config.default.js 配置文件中,我们需要配置 Typeorm 连接信息:

module.exports = {
  typeorm: {
    type: 'mysql',
    host: 'localhost',
    port: 3306,
    username: 'root',
    password: '123456',
    database: 'my_database',
    entities: ['src/entity/*.js'],
    synchronize: true,
  },
};

定义实体类

实体类是 Typeorm 用于映射数据库表的类。我们需要在 src/entity 目录下创建实体类文件,例如 User.js

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

@Entity()
export class User {

  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  age: number;

}

动态创建表

Midway 启动时,Typeorm 会自动创建数据库表。如果我们需要动态创建表,可以使用 createConnection() 方法:

const connection = await createConnection();
connection.synchronize();

获取 Repository 对象

Repository 对象是 Typeorm 用于对数据库表进行增删改查的类。我们可以使用 getRepository() 方法获取 Repository 对象:

const userRepository = connection.getRepository(User);

增删改查

我们可以使用 Repository 对象对数据库表执行增删改查操作:

  • 插入数据:await userRepository.insert({ name: 'John Doe', age: 20 });
  • 查询数据:const users = await userRepository.find();
  • 更新数据:await userRepository.update({ id: 1 }, { name: 'Jane Doe' });
  • 删除数据:await userRepository.delete({ id: 2 });

结语

通过使用 Typeorm,我们可以轻松地操作数据库,提高开发效率。本文介绍了如何在 Midway 中使用 Typeorm 进行动态建表和数据查询。

常见问题解答

  • 如何配置 Typeorm 与 MongoDB 连接?
    配置 MongoDB 连接的方式与 MySQL 类似,只需在 typeorm 配置中将 type 设置为 mongodb

  • 如何定义关系实体?
    使用 @OneToMany()@ManyToOne() 等装饰器来定义实体之间的关系。

  • Typeorm 如何处理并发访问?
    Typeorm 使用乐观并发控制(OCC)来处理并发访问,默认情况下会使用乐观锁。

  • 如何使用 Typeorm 进行复杂的查询?
    可以使用 QueryBuilder 来构建复杂的查询,支持连接、嵌套、分组和聚合等操作。

  • Typeorm 与 Sequelize 有什么区别?
    Typeorm 使用 TypeScript 编写,更注重实体类的定义,而 Sequelize 使用 JavaScript 编写,更注重查询构建器。