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安装依赖包即可。
最终项目结构如下:
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表,且插入了一条数据。
// 通过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)
查询结果返回数组数据:
创建一个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后查看数据:
最后发现一个问题;如果实体模型没有指定主键是无法创建表的;不知为何,希望懂ORM底层原理的帮忙解答下。
每天学一点点,每天进步一点点!! ———觉醒