npm install typeorm -g
typeorm init --name MyProject --database mysql
{
"type": "mysql", // 选用的数据库
"host": "localhost", // 数据库地址
"port": 3306, // 数据库端口
"username": "test", // 数据库用户名
"password": "test", // 数据库密码
"database": "test", // 数据库
"synchronize": true, // 是否同步true表示会自动将src/entity里面定义的数据模块同步到数据库生成数据表(已经存在的表的时候再运行会报错)
"dropSchema": true, // 删除数据库中的表
"logging": false, // 是否打印日志,执行sql语句时候输出原生sql,也可以配置成一个数组["query", "error", "schema"]指定sql的执行类型
"charset": "utf8mb4", // 编码
"timezone": "local", // 时区,默认本地,也可以写"+8"
"entityPrefix": "", // 给此数据库连接上的所有表(或集合)加的前缀。
"entities": [ // 定义TypeORM需要查找的数据模型的,可以定义多个
"src/entity/**/*.ts"
],
"migrations": [ // 数据迁移文件生成的地方
"src/migration/**/*.ts"
],
"subscribers": [ // 订阅(用的少)
"src/subscriber/**/*.ts"
],
"cli": { // 数据迁移工具使用的
"entitiesDir": "src/entity",
"migrationsDir": "src/migration",
"subscribersDir": "src/subscriber"
}
}
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn } from "typeorm";
@Entity({ name: 'user' })
export class User {
@PrimaryGeneratedColumn({
type: 'int',
name: 'id',
comment: '主键id'
})
id: number;
@Column({
type: 'varchar',
nullable: false,
length: 50,
unique: true,
name: 'username', // 如果是一样的可以不指定
comment: '用户名'
})
username: string;
@Column({
type: 'varchar',
nullable: false,
length: 100,
comment: '密码'
})
password: string;
@Column('tinyint', {
nullable: false,
default: () => 0,
name: 'is_del',
comment: '是否删除,1表示删除,0表示正常'
})
isDel: number;
@CreateDateColumn({
type: 'timestamp',
nullable: false,
name: 'created_at', // mysql数据库规范是使用下划线命名的,不使用驼峰
comment: '创建时间'
})
createdAt: Date;
@UpdateDateColumn({
type: 'timestamp',
nullable: false,
name: 'updated_at',
comment: '更新时间',
})
updateAt: Date;
}
关于@Entity()中可扩充的参数
name配置映射到数据库表名,如果不指定会以实体类名字创建数据表
orderBy排序方式(一般不用)
engine引擎(一般不用)
database数据库(一般不用,除非多个数据库的时候)
不管是使用@PrimaryGeneratedColumn()、@Column()等装饰器装饰字段的我们都叫字段装饰器
type配置字段类型,在mysql中字符类型可能是char、varchar、text,数字类型可能是int、tinyint,小数类型可能是float、double、decimal(10,2)等
name真正映射到mysql数据库中字段名字,如果不指定会默认以对象的字段为名字(建议都指定)
length长度,比如在mysql中字段为varchar的时候指定字段长度
nullable在mysql中字段是否可以为NULL值,默认为false
select改字段是否可以被查询出来(针对使用typeORM的查寻操作,不针对你使用原生SQL语句操作),默认为true表示可以被查询出来
default默认值,比如插入数据的时候,没传递该字段的值,就默认一个值
unique是否唯一约束
comment备注该字段是做什么的(建议都写上,方便阅读)
enum枚举类型
array该列是否以数组
import "reflect-metadata";
import { createConnection } from "typeorm";
import { User } from "./entity/User";
createConnection().then(async connection => {
const user = new User()
user.username = '张三';
user.password = '123456';
// save里面传递一个对象
connection.manager.save(user).then(user => {
console.log('插入成功', user);
});
}).catch(error => console.log(error));
createConnection().then(async connection => {
// 2.使用async+await
const user = new User();
user.username = '李四';
user.password = '123456';
const result = await connection.manager.save(user);
console.log('插入结果', result);
}).catch(error => console.log(error));
createConnection().then(async connection => {
// 3.使用Repositories方式新增数据
const user = new User();
user.username = '王五';
user.password = '123456';
const userRepository = connection.getRepository(User);
const result = await userRepository.save(user);
console.log(result);
}).catch(error => console.log(error));
createConnection().then(async connection => {
// 4.删除数据
// 4.1创建一个句柄
const userRepository = connection.getRepository(User);
// 4.2根据句柄去查询实体findOne传递数字会默认根据id查询
const user = await userRepository.findOne(1);
// 4.3删除数据
await userRepository.remove(user);
}).catch(error => console.log(error));
// 5.修改数据
const userRepository = connection.getRepository(User);
const user = await userRepository.findOne(2);
user.password = '23456';
await userRepository.save(user);