typeorm框架初食用一

854 阅读2分钟

typeorm是基于nodejs封装的orm框架,orm为Object Relational Mapping(对象关系映射)的缩写,通过建立实体orm自动和数据库表进行映射,一个实体对象对应着表中的一条记录;通过typeorm可以编写出最高效的方式编写高质量的、松耦合的、可扩展的、可维护的应用程序。

为了成为全寨攻城狮,学习下咯!

快速开始

通过npx执行typeorm命令来创建项目

npx typeorm init --name 项目名称 --database 使用的数据库

npx typeorm init typeorm-demo --database mysql

因为npx typeorm init默认使用npm安装依赖包,导致依赖包安装失败,进入项目目录,执行yarn安装依赖包即可。 image.png

最终项目结构如下:

image.png typeorm-demo

├── src                   // ts代码编辑的地方
│   ├── entity            // 实体目录
│   │   └── User.ts       // 实体案例
│   ├── migration         // 存储迁移目录
│   ├── data-source.ts    // 数据源及配置连接的类
│   └── index.ts          // 程序启动文件
├── .gitignore            
├── package.json         
├── README.md            
└── tsconfig.json       

最新版本使用的是通过DataSource来构建连接,之前的版本使用的是createConnection,在新版本已弃用。

更改数据源配置

根据使用的数据库类型,更改数据源配置

export const AppDataSource = new DataSource({
    type: "mysql", // 使用的数据库类型
    host: "localhost", //ip 本地为localhost
    port: 3306, // 数据库使用的端口
    username: "root", //数据库用户名
    password: "x", // 数据库用户密码
    database: "typeorm-demo", //使用的数据库名字
    synchronize: true, // 是否同步,如果为true,新建的实体会更新建表或更新字段
    logging: true, // 是否开启日志 为true 为打印执行的sql
    entities: ["./**/entity/*.ts"], // 加载entity目录下的ts文件为model
    migrations: [],
    subscribers: [],
})

运行程序

执行yarn start 后typeorm 会自动初始化entity下的model文件进行见表,新建了user表,且插入了一条数据。

image.png

// 通过DataSource对象初始化连接数据库
AppDataSource.initialize().then(async () => {
    // 创建user对象
    const user = new User()
    user.firstName = "Timber"
    user.lastName = "Saw"
    user.age = 25
    //通过manager.save保存user对象
    await AppDataSource.manager.save(user)
    //通过manager.find查询user表的所有数据
    const users = await AppDataSource.manager.find(User)
}).catch(error => console.log(error))

const users = await AppDataSource.manager.find(User)查询结果返回数组数据: image.png

创建一个model,告诉数据库哥要创建表

通过@Entity()注解标记该类对应一个数据库表;通过@Colum()标记该属性对应一个表字段,通过@PrimaryColumn()标记表主键

import { Column, Entity } from "typeorm";

@Entity()
export class Photo {
  @PrimaryColumn()
  id: number;
  
  @Column()
  name: string;
  
  @Column()
  description: string;
  
  @Column()
  filename: string;
  
  @Column()
  views: number;
  
  @Column()
  isPublished: boolean;
}

重新执行yarn start后查看数据:

image.png

最后发现一个问题;如果实体模型没有指定主键是无法创建表的;不知为何,希望懂ORM底层原理的帮忙解答下。

每天学一点点,每天进步一点点!! ———觉醒