【typeorm】typorm学习笔记(三)

前言

  • 本篇是find,queryBuilder以及migration相关。

find相关

1、全部查询所有的字段

const userRepository = connection.getRepository(User);
const result = await userRepository.find();
console.log(result);

执行的SQL类似

select * from user;

2、使用select选择性的查询想要的字段

const userRepository = connection.getRepository(User);
const result = await userRepository.find({ select: ['id', 'username'] });
console.log(result);

执行的SQL类似

select id, username from user;

3、使用where条件查询

const userRepository = connection.getRepository(User);
const result = await userRepository.find({ where: { id: 1 } });
console.log(result);

执行的SQL类似

select * from user where user.id = 1;

4、使用where多条件and的关系查询数据

const userRepository = connection.getRepository(User);
const result = await userRepository.find({ where: { id: 1, username: 'xx' } });
console.log(result);

执行的SQL类似

select * from user where user.id = 1 and user.username = 'xx';

5、使用where多条件or的关系查询数据

const userRepository = connection.getRepository(User);
const result = await userRepository.find({ where: [{ id: 1 }, { username: 'xx' }] });
console.log(result);

执行的SQL类似

select * from user where user.id = 1 or user.username = 'xx';

6、relations关系查询(前提是要先有外键关联关系)

const userRepository = connection.getRepository(User);
const result = await userRepository.find({ relations: ['userDetail'] });
console.log(result);

执行的SQL类似

select a.*,b.* from user as a left join user_extend as b on a.id = b.userId;

7、使用join关系查询(对relations的扩展)

const userRepository = connection.getRepository(User);
const result = await userRepository.find({
    join: {
        alias: 'user',
        leftJoinAndSelect: {
            detail: 'user.userDetail',
            posts: 'user.posts'
        }
    }
});
console.log(JSON.stringify(result));

8、order排序查询

const userRepository = connection.getRepository(User);
const result = await userRepository.find({
    order: {
        id: 'DESC',
        username: 'ASC'
    }
});
console.log(result);

执行的SQL类似

select * from user order by username asc, id desc;

9、分页查询数据

skip偏移(表示从哪里开始)
take查询多少条数据

const userRepository = connection.getRepository(User);
const result = await userRepository.find({
    skip: 0,
    take: 10,
})
console.log(result);

执行的SQL类似

select * from user limit 0,10;

10、Not

const userRepository = connection.getRepository(User);
const result = await userRepository.find({
    username: Not('王五')
});
console.log(result);

执行的SQL类似

select * from user where username != '王五';

11、LessThan小于,一般用于数字

12、LessThanOrEqual小于或者等于

13、MoreThan大于

14、MoreThanOrEqual大于等于

15、Equal等于

16、Like模糊查询 xx: LIKE(’%yy%’)

17、Between两个范围之间xx: Between(1,10)

18、In在什么里面xx: In([’’,’’])

  • find其他方法:
    1、find查找返回一个数组
    2、findOne查询返回一个对象,直接传递一个数字进去,会根据id去查询
    3、findAndCount查询返回数量[data, count]
    4、findByIds([])根据id数组查询

Querybuilder相关

  • 创建querybuilder的几种方式

1、使用connection创建方式

import "reflect-metadata";
import { createConnection, getConnection } from "typeorm";
import { User } from "./entity/User";

createConnection().then(async connection => {
  // 1.使用connection创建
  const user = await getConnection()
    .createQueryBuilder()
    .select(['user.id', 'user.username']) // 需要选择查询的字段,如果想要全部查询可以不加select
    .from(User, 'user') // 从哪张表,并且定义别名为user
    .where('(user.id=:id)', { id: 1 }) // 过滤条件
    .getOne(); // 查询一个
  console.log(user);
}).catch(error => console.log(error));

2、使用connection创建方式二

// 2.使用connection创建
const user = await getConnection()
  .createQueryBuilder(User, 'user')
  .select(['user.id', 'user.username'])
  .where('(user.id=:id)', { id: 1 })
  .getOne();
console.log(user);

3、使用entity manager

// 3.使用entity manager创建
const user = await getManager()
  .createQueryBuilder(User, 'user')
  .select('user')
  .getMany();
console.log(user);

4、使用repository

// 4.使用repository创建
const user = await getRepository(User)
  .createQueryBuilder('user')
  .getMany();
console.log(user);
  • 增删改查示例

1、查询数据

const user = await getConnection()
  .createQueryBuilder(User, 'user')
  .select(['user.id', 'user.username'])
  .where('(user.id=:id)', { id: 1 })
  .getOne();
console.log(user);

2、插入数据

// 插入数据
const result = await getConnection()
  .createQueryBuilder()
  .insert() // 插入数据的时候要指明插入到那个实体类
  .into(User)
  .values([{ username: '张三', password: '1234' }, { username: '李四', password: '12345' }])
  .execute();
console.log(result);

3、更新数据

// 更新数据
const result = await getConnection()
  .createQueryBuilder()
  .update(User)
  .set({ username: '哈哈哈' })
  .where('id=:id', { id: 1 })
  .execute();
console.log(result);

4、删除数据

// 删除数据
const result = await getConnection()
  .createQueryBuilder()
  .delete()
  .from(User)
  .where('id=:id', { id: 3 })
  .execute();
console.log(result);

5、创建关系查询

// 创建关系查询
const result = await getConnection()
  .createQueryBuilder(User, 'user')
  // 第一个参数是定义字段,第二个实体类,第三个是别名,第四个是条件
  .leftJoinAndMapMany('user.posts', Posts, 'posts', 'user.id=posts.userId')
  .getMany();
console.log(JSON.stringify(result));
  • 查询方法

1、getOne查询一条数据

2、getMany查询多条数据

3、getRawOne使用聚合函数的时候下查询一条数据

4、getRawMany使用聚合函数的时候下查询多条数据

const result = await getConnection()
  .createQueryBuilder(User, 'user')
  // 使用了聚合函数就要使用getRawOne或者getRawMany方法
  .select('SUM(user.id)', 'sum')
  .getRawOne();
console.log(result);
  • 参数

1、直接使用

.where("user.username = :username", { username: "哈哈" })

2、使用setParameter填充值

.where("user.username = :username")
.setParameter("username", "哈哈")

3、LINK模糊查询

.where("user.username like :username", {username: `% %{username} %`})

4、IN查询

.where("user.username IN (:...username)", { username: [ "Timber", "Cristal", "Lina" ] })

migration

  • 配置命令
 "generate": "ts-node  ./node_modules/typeorm/cli.js migration:generate -n Test",
    "db": "ts-node ./node_modules/typeorm/cli.js migration:run"
  • 每次修改前运行
# 注意顺序执行
npm run generate
npm run db
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

业火之理

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值