JSRUN 用代码说话

从 Sequelize 迁移到 TypeORM

编辑教程

从 Sequelize 迁移到 TypeORM

建立连接

在 sequelize 中,可以通过以下方式创建连接:

const sequelize = new Sequelize("database", "username", "password", {
  host: "localhost",
  dialect: "mysql"
});

sequelize
  .authenticate()
  .then(() => {
    console.log("Connection has been established successfully.");
  })
  .catch(err => {
    console.error("Unable to connect to the database:", err);
  });

在 TypeORM 中,可以创建如下连接:

import { createConnection } from "typeorm";

createConnection({
  type: "mysql",
  host: "localhost",
  username: "username",
  password: "password"
})
  .then(connection => {
    console.log("Connection has been established successfully.");
  })
  .catch(err => {
    console.error("Unable to connect to the database:", err);
  });

然后使用getConnection从应用程序的任何位置获取连接实例。

架构同步

在 sequelize 中,你可以通过以下方式进行架构同步:

Project.sync({ force: true });
Task.sync({ force: true });

在 TypeORM 中,你只需在连接选项中添加synchronize:true

createConnection({
  type: "mysql",
  host: "localhost",
  username: "username",
  password: "password",
  synchronize: true
});

创建模型

以下是 sequelize 中定义模型的方式:

module.exports = function(sequelize, DataTypes) {
  const Project = sequelize.define("project", {
    title: DataTypes.STRING,
    description: DataTypes.TEXT
  });

  return Project;
};
module.exports = function(sequelize, DataTypes) {
  const Task = sequelize.define("task", {
    title: DataTypes.STRING,
    description: DataTypes.TEXT,
    deadline: DataTypes.DATE
  });

  return Task;
};

在 TypeORM 中,这些模型称为实体,你可以像这样定义它们:

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

@Entity()
export class Project {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  @Column()
  description: string;
}
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";

@Entity()
export class Task {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  @Column("text")
  description: string;

  @Column()
  deadline: Date;
}

强烈建议为每个文件定义一个实体类。 TypeORM 允许你将类用作数据库模型 并提供一种声明性方法来定义模型的哪个部分将成为数据库表的一部分。 TypeScript 的强大功能为你提供类型提示和其他可在类中使用的有用功能。

其他模型设置

在 sequelize 中:

flag: { type: Sequelize.BOOLEAN, allowNull: true, defaultValue: true },

可以在 TypeORM 中实现,如下所示:

@Column({ nullable: true, default: true })
flag: boolean;

在 sequelize 中:

flag: { type: Sequelize.DATE, defaultValue: Sequelize.NOW }

在 TypeORM 中这样写:

@Column({ default: () => "NOW()" })
myDate: Date;

在 sequelize 中:

someUnique: { type: Sequelize.STRING, unique: true },

可以在 TypeORM 中实现这种方式:

@Column({ unique: true })
someUnique: string;

在 sequelize 中:

fieldWithUnderscores: { type: Sequelize.STRING, field: "field_with_underscores" },

在 TypeORM 中可以这样:

@Column({ name: "field_with_underscores" })
fieldWithUnderscores: string;

在 sequelize 中:

incrementMe: { type: Sequelize.INTEGER, autoIncrement: true },

在 TypeORM 中可以这样:

@Column()
@Generated()
incrementMe: number;

在 sequelize 中:

identifier: { type: Sequelize.STRING, primaryKey: true },

在 TypeORM 中可以这样:

@Column({ primary: true })
identifier: string;

要创建createDateupdateDate,就像定义其他列一样,在实体中定义两列,并将其命名:

@CreateDateColumn();
createDate: Date;

@UpdateDateColumn();
updateDate: Date;

使用模型

要在 sequelize 中创建新模型:

const employee = await Employee.create({ name: "John Doe", title: "senior engineer" });

在 TypeORM 中,有几种方法可以创建新模型:

const employee = new Employee(); // 你也可以使用构造函数参数
employee.name = "John Doe";
employee.title = "senior engineer";

或者

const employee = Employee.create({ name: "John Doe", title: "senior engineer" });

如果要从数据库加载现有实体并替换其某些属性,可以使用以下方法:

const employee = await Employee.preload({ id: 1, name: "John Doe" });

在 sequelize 中访问属性,可执行以下操作:

console.log(employee.get("name"));

在 TypeORM 中你只需:

console.log(employee.name);

要在 sequelize 中创建索引,可使用:

sequelize.define(
  "user",
  {},
  {
    indexes: [
      {
        unique: true,
        fields: ["firstName", "lastName"]
      }
    ]
  }
);

在 TypeORM 中你只需:

@Entity()
@Index(["firstName", "lastName"], { unique: true })
export class User {}
JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟