前言

  • 最近越来越多听到这玩意了,试玩下。看了下介绍,有点叼,一个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+awaitconst 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);
  • 另外这个配置,上有个同步时是建表的 ,保持开启就行。

【typeorm】typeorm学习笔记(一)相关推荐

  1. NestJS学习笔记

    说明 学习NestJS 官方基础课程[中英字幕 NestJS Fundamentals Course] 个人笔记 因为用不到测试,所以暂时学到了P65 后续项目可能用不到MogoDB,后面的也就没看 ...

  2. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  3. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  4. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  5. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  6. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  7. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  8. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  9. Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)

    Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...

  10. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

最新文章

  1. 用bitmap实现中位数的算法
  2. 使用计算机的缺点英文作文,网络与计算机的好处与坏处英文作文
  3. 借助联合体union的特性实现检测当前计算机环境采用的是大端模式还是小端模式
  4. 【Linux】7_存储管理基本分区
  5. onselectstart 、onselect区别
  6. 为你的AliOS Things应用增加自定义cli命令
  7. js处理16进制hex转str出现的中文乱码问题
  8. JS数组关联查找的性能优化
  9. Java数据结构——队列
  10. ubuntu中gitlab搭建
  11. 我所了解的GB2312、Unicode、GBK、UTF-8、BIG5等编码
  12. python3中expected an indented block(缩进问题)
  13. veeam安装及使用
  14. android svg 线条动画教程,SVG技术入门:线条动画实现原理
  15. Java学习笔记(9)-StringBuilder类二
  16. c语言---16 关于goto语句
  17. java走迷宫_走迷宫问题Java递归
  18. 妮维雅 || 德国百年“大宝”的年轻态营销
  19. TRANSFORM_TEX是做什么的
  20. 用java制作一个简易抽签器

热门文章

  1. JS 对象属性的两种表示方法
  2. C语言 数组表示方法与区分
  3. [离散数学]集合论基础P_5:可数集合与不可数集合
  4. 转变思考方向,由结果推导原因,找出惯性思维所忽略的地方
  5. 花园植物花卉高清照片合集 Garden photo Pack
  6. DeepinLinux操作系统(深度操作系统)下载地址
  7. Android应用开发之FrameLayout(帧布局)
  8. 沟通感悟—之沟通原则
  9. 销魂的12306验证码
  10. 工业路由器的拆解过程