从 Sequelize 迁移到 TypeORM

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

    1. createConnection({
    2. type: "mysql",
    3. host: "localhost",
    4. username: "username",
    5. password: "password"
    6. })
    7. .then(connection => {
    8. console.log("Connection has been established successfully.");
    9. })
    10. .catch(err => {
    11. console.error("Unable to connect to the database:", err);
    12. });

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

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

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

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

    1. createConnection({
    2. type: "mysql",
    3. host: "localhost",
    4. username: "username",
    5. password: "password",
    6. synchronize: true
    7. });

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

    1. module.exports = function(sequelize, DataTypes) {
    2. const Project = sequelize.define("project", {
    3. title: DataTypes.STRING,
    4. description: DataTypes.TEXT
    5. });
    6. };
    1. module.exports = function(sequelize, DataTypes) {
    2. const Task = sequelize.define("task", {
    3. description: DataTypes.TEXT,
    4. deadline: DataTypes.DATE
    5. });
    6. return Task;
    7. };

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

    1. import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
    2. @Entity()
    3. export class Project {
    4. @PrimaryGeneratedColumn()
    5. id: number;
    6. @Column()
    7. title: string;
    8. @Column()
    9. description: string;
    10. }
    1. import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
    2. @Entity()
    3. export class Task {
    4. @PrimaryGeneratedColumn()
    5. id: number;
    6. @Column()
    7. title: string;
    8. @Column("text")
    9. @Column()
    10. deadline: Date;

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

    在 sequelize 中:

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

    在 sequelize 中:

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

    在 TypeORM 中这样写:

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

    在 sequelize 中:

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

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

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

    在 sequelize 中:

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

    在 TypeORM 中可以这样:

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

    在 sequelize 中:

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

    在 TypeORM 中可以这样:

    1. @Column()
    2. @Generated()
    3. incrementMe: number;

    在 TypeORM 中可以这样:

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

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

    1. @CreateDateColumn();
    2. createDate: Date;
    3. @UpdateDateColumn();
    4. updateDate: Date;

    要在 sequelize 中创建新模型:

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

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

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

    或者

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

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

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

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

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

    在 TypeORM 中你只需:

    1. console.log(employee.name);

    在 TypeORM 中你只需:

    1. @Entity()
    2. export class User {}