【typeorm】typeorm学习笔记(一)
前言
- 最近越来越多听到这玩意了,试玩下。看了下介绍,有点叼,一个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学习笔记(一)相关推荐
- NestJS学习笔记
说明 学习NestJS 官方基础课程[中英字幕 NestJS Fundamentals Course] 个人笔记 因为用不到测试,所以暂时学到了P65 后续项目可能用不到MogoDB,后面的也就没看 ...
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
- 2020年Yann Lecun深度学习笔记(上)
2020年Yann Lecun深度学习笔记(上)
- 知识图谱学习笔记(1)
知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...
- 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...
- 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 ...
- MongoDB学习笔记(入门)
MongoDB学习笔记(入门) 一.文档的注意事项: 1. 键值对是有序的,如:{ "name" : "stephen", "genda" ...
最新文章
- 用bitmap实现中位数的算法
- 使用计算机的缺点英文作文,网络与计算机的好处与坏处英文作文
- 借助联合体union的特性实现检测当前计算机环境采用的是大端模式还是小端模式
- 【Linux】7_存储管理基本分区
- onselectstart 、onselect区别
- 为你的AliOS Things应用增加自定义cli命令
- js处理16进制hex转str出现的中文乱码问题
- JS数组关联查找的性能优化
- Java数据结构——队列
- ubuntu中gitlab搭建
- 我所了解的GB2312、Unicode、GBK、UTF-8、BIG5等编码
- python3中expected an indented block(缩进问题)
- veeam安装及使用
- android svg 线条动画教程,SVG技术入门:线条动画实现原理
- Java学习笔记(9)-StringBuilder类二
- c语言---16 关于goto语句
- java走迷宫_走迷宫问题Java递归
- 妮维雅 || 德国百年“大宝”的年轻态营销
- TRANSFORM_TEX是做什么的
- 用java制作一个简易抽签器