前言相信很多前端玩家在第一次使用Node.js连接SQL并使用的时候,都会觉得相当的繁琐,甚至是吃力。不要害怕!TypeORM帮你解决所有操作sql的问题!本文仅作为安利功能,不详细介绍TypeORM的使用。如有需要,请访问官网或Gitee介绍1.先看看效果//在标签表中添加一条新记录constinsertOne=async(name:string,memo:string)=>{try{lettag=new标签();tag.name=名称;tag.memo=备忘录;等待getConnection().manager.save(标签);返回真;}catch(err){返回错误;}};Delete//传入一个实体和id,删除这个实体(表)中id为传入值的记录constdeleteOne=async(entity,id:number)=>{try{constrepository=getRepository(实体);等待存储库.delete(id);返回真;}catch(err){返回错误;}};Change//引入需要操作的实体(表),id,需要更新的参数constupdateOne=async(entity,id:number,params:object)=>{try{constrepository=getRepository(实体);让结果=等待存储库。更新(id,参数);返回真;}catch(err){返回错误;}};//根据传入的实体(表)和id进行精准查询constfindOne=async(entity,id:number)=>{try{constrepository=getRepository(entity);让result=awaitrepository.findOne(id);返回结果;}catch(err){返回错误;}};//根据传入查询所有实体constfindAll=async(entity,relations:string[]=null)=>{try{constrepository=getRepository(entity);returnawaitrepository.find({relations,//查表时,也查出外键所在表的信息order:{//根据createTime列排序createTime:"DESC"}});}catch(err){返回错误;}};//分页查询exportconst$_findPaginated=async(entity,pageIndex,pageSize,relations:string[]=null)=>{try{constrepository=getRepository(entity);returnawaitrepository.findAndCount({skip:(pageIndex-1)*pageSize,//跳过多少take:pageSize,//需要多少关系,order:{createTime:"DESC"}});}catch(err){返回错误;}};很简单的!!很纯的js写法!!而且包装和使用都非常方便。除了第一种(个人项目原因未打包)外,我已经打包并使用了上面列出的方法。把sql拼接字符串都写一遍,调一下方法就可以了~2.什么是TypeORM?首先,让我们谈谈ORMORM(对象关系映射)框架。元数据用于描述对象和关系映射的细节。元数据一般采用XML格式。并且保存在一个特殊的object-mapping文件中,也就是说我们可以通过操作对象来操作数据库。TypeORM自然是适合Node.js的ORM框架。3.如何通过操作对象来操作数据库,我们首先要定义一个映射关系,告诉框架我操作这个对象的时候要改哪个数据库,否则我就瞎改。那么这种关系是如何确定的呢?TypeORM使用了实体的概念(在我评论的第一部分,我一直强调操作实体就是操作表),实体是映射到数据库表的类(或者使用MongoDB时的集合),如下图import{Entity,Column,PrimaryGeneratedColumn,CreateDateColumn,UpdateDateColumn}from"typeorm";//下面用到的列,别忘了在上面导入//一个照片实体,对应数据库中的一个Photo表@Entity()exportclassPhoto{@PrimaryGeneratedColumn()//一个自增的主键id:数字;@Column({length:100})//字符串列,长度限制为100,对应数据库中的varchar类型name:string;@Column("text")//长度不限,对应数据库描述中的文本类型:string;@Column()//什么都不设置要小心!!默认情况下会设置NOTNULL!插入文件名时一定要设置这个字段的值:string;@column({default:"defaultvalue"})//如果设置了默认值,那么插入memo:string时可以不设置这个值@Column("double")//对应数据库中的double类型意见:数量;@Column()已发布:布尔值;@CreateDateColumn()//该列在插入时会自动赋值当前时间,更新时不会改变值:string//至于与表相关的其余列(@ManyToOne,@OneToMany,@ManyToMany),请研究上面给出的两个网站,博客字数有限,就不详细展开了}很明显,我们写完上面的定义后,会在数据库中生成一张表Photo,所以我们可以这样写它在js中创建一个表的一条sql语句!idnamedescriptionfileNamememoviewsisPublishedcreateTimeupdateTime*********************4.操作实体(操作数据库)当我们在构建项目创建实体的时候,我们可以通过操作实体来操作数据库!有两种操作实体的方法。使用实体管理器EntityManager并使用存储库Repository。这两件事有什么区别?emm,没有什么不同EntityManager就像一个位置的所有实体存储库的集合。Repository虽然类似于EntityManager,但是Repository的操作仅限于具体的实体,所以Repository需要传入实体来创建!按如下方式导入“反射元数据”;从“typeorm”导入{getManager,getRepository};从“./entity/Photo”导入{Photo}letmanager=getManager();让存储库=getRepository(照片);那么你就可以用这两个小工具为所欲为了!后记本文仅简单介绍了TypeORM的使用,如需详细使用请查看官网。官方文档写的比较详细。虽然是英文,但是大家右键翻译成中文也不难。祝您生活愉快
