typeorm_在Node.js上纵享丝滑地操纵SQL~【TypeORM】

前言

相信很多前端的玩家,在刚开始使用Node.js连接sql并且使用的时候,会感觉相当繁琐,甚至是有些困难。

不用怕!TypeORM帮你解决关于一切关于操作sql的问题!

本篇文章只作一个安利作用,不详细描述TypeORM的使用,如有需要,请访问官网或者Gitee介绍

1.先看看效果

//在tag表中加入一条新记录

const insertOne = async (name: string,memo:string) => {

try {

let tag = new Tag();

tag.name = name;

tag.memo = memo;

await getConnection().manager.save(tag);

return true;

} catch (err) {

return err;

}

};

//传入一个实体和id,删除这个实体(表)中id为传入值的记录

const deleteOne = async (entity, id: number) => {

try {

const repository = getRepository(entity);

await repository.delete(id);

return true;

} catch (err) {

return err;

}

};

//传入需要操作的实体(表),id,以及需要更新的参数

const updateOne = async (entity, id: number, params: object) => {

try {

const repository = getRepository(entity);

let result = await repository.update(id, params);

return true ;

} catch (err) {

return err;

}

};

//根据传入的实体(表)和id精确查询

const findOne = async (entity, id:number) => {

try {

const repository = getRepository(entity);

let result = await repository.findOne(id);

return result;

} catch (err) {

return err;

}

};

//根据传入的实体查询全部

const findAll = async (entity, relations: string[] = null) => {

try {

const repository = getRepository(entity);

return await repository.find({

relations, //查表的时候把外键所在表的信息也查出来

order: { //根据createTime这个列来进行排序

createTime: "DESC"

}

});

} catch (err) {

return err;

}

};

//分页查询

export const $_findPaginated = async (

entity,

pageIndex,

pageSize,

relations: string[] = null

) => {

try {

const repository = getRepository(entity);

return await repository.findAndCount({

skip: (pageIndex - 1) * pageSize,//跳过多少

take: pageSize,//取多少

relations,

order: {

createTime: "DESC"

}

});

} catch (err) {

return err;

}

};

非常简单!!非常纯粹的js写法!!而且封装起来使用非常方便,上面列出的方法除了第一个(因个人项目原因未封装),其他的我都封装起来使用了,不用一遍一遍写sql拼接字符串啦,只需要调方法就可以啦~

2.什么是TypeORM

首先说说ORM

ORM(Object Relational Mapping)框架采用元数据来描述对象与关系映射的细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。

意思就是我们可以通过操作对象来操作数据库

而TypeORM呢,自然就是一款适用于Node.js的ORM框架啦

3.如何通过操作对象来操作数据库

我们首先肯定要定义一种映射关系,告诉这个框架,我操作这个对象是要改哪个数据库,不然那就瞎JB改了阿。

那么这种关系如何确定呢?

TypeORM使用了一个实体的概念(第一部分我的注释里也一直强调操作实体就是操作表),实体是一个映射到数据库表(或使用MongoDB时的集合)的类,如下所示

import { Entity, Column, PrimaryGeneratedColumn,CreateDateColumn,UpdateDateColumn } from "typeorm";

//下面使用了的列,别忘了在上面import噢

//一个照片实体,对应的数据库一个Photo表

@Entity()

export class Photo {

@PrimaryGeneratedColumn()

//一个自增的并且是主键

id: number;

@Column({

length: 100

})

//长度限制为100的string列,对应数据库里就是varchar类型

name: string;

@Column("text")

//长度不限,对应数据库里就是text类型

description: string;

@Column()

//什么都不设置的时候需要注意!!会默认设置NOT NULL!插入时一定要设定这一字段的值

filename: string;

@column({

default:"默认值"

})

//如果设置了默认值,那么当插入的时候可以不设定这一值

memo:string

@Column("double")

//对应数据库里double类型

views: number;

@Column()

isPublished: boolean;

@CreateDateColumn()

//这个列会在插入的时候自动以当前时间赋值,更新时不改变值

createTime:string

@UpdateDateColumn()

//这个列会在插入和更新的时候以当前时间赋值

updateTime:string

//至于剩下的连表相关的列(@ManyToOne,@OneToMany,@ManyToMany),请在以上给出的两个网站中进行学习,博文字数有限,不作详细展开

}

显而易见的是,我们写好了以上的定义以后,数据库里就会生成一个表Photo,这样我们就用js写好了一个创建表的sql语句!

id

name

description

fileName

memo

views

isPublished

createTime

updateTime

**

**

**

**

**

**

**

**

**

4.操作实体(操作数据库)

当我们把项目搭建好,创建好实体以后呢,我们就可以通过操作实体来操作数据库啦!

操作实体有两种方法

使用实体管理器EntityManager

使用储存库Repository

这两个东西有什么区别呢?

emm,没什么不同。

EntityManager就像单个位置上所有实体存储库的集合一样。而Repository虽然与EntityManager类似,但是Repository操作仅限于具体实体,所以Repository需要传入实体来创建!

如下

import "reflect-metadata";

import { getManager,getRepository } from "typeorm";

import {Photo} from "./entity/Photo"

let manager = getManager();

let repository = getRepository(Photo);

然后你就可以使用这两个玩意儿来为所欲为啦!

后语

本文只简单介绍了TypeORM的使用,如果要详细使用请查看官网噢。官方文档写得比较详细,虽然是英文的,但是右键翻译成中文想来对大家也不是难事。

祝生活愉快

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值