前言
- 本篇是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