【typeorm】typeorm学习笔记(一)

tech2022-08-28  115

前言

最近越来越多听到这玩意了,试玩下。看了下介绍,有点叼,一个orm居然支持各种主流数据库。

安装

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该列是否以数组

增删改查

新增 3种方式 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); 另外这个配置,上有个同步时是建表的 ,保持开启就行。
最新回复(0)