通过Entity Manager创建QueryBuilder
创建QueryBuilder的方法有多种
- 1、
import { getManager } from "typeorm";
const user = await getManager()
.createQueryBuilder(UserEntity, "user") // 使用UserEntity 定义别名user
.where("user.id = :id", { id: 1 }) // 查询条件 id: 1
.getOne(); // 获取一条数据
- 2、
const user = await getConnection()
.createQueryBuilder(User, 'user')
.select(['user.id', 'user.username'])
.where('(user.id=:id)', { id: 1 })
.getOne();
console.log(user);
- 3、
const user = await getRepository(User)
.createQueryBuilder('user')
.getMany();
console.log(user);
QueryBuilder 五种类型
- 1、查询数据
const user = await getConnection()
.createQueryBuilder(UserEntity, 'user')
.select(['user.id', 'user.username']) // 查询 id 和 username
.where('(user.id=:id)', { id: 1 })
.getOne();
console.log(user);
- 2、插入数据
const result = await getConnection()
.createQueryBuilder()
.insert() // 插入数据到实体类UserEntity中
.into(UserEntity)
.values([
{ username: "张三", password: "123456" },
{ username: "李四", password: "123456" }
])
.execute()
console.log(result)
- 3、更新数据
const result = await getConnection()
.createQueryBuilder()
.update(UserEntity)
.set({ username: "哈哈哈" })
.where("id=:id", { id: 1 })
.execute()
console.log(result)
- 4、删除数据
const result = await getConnection()
.createQueryBuilder()
.delete()
.from(UserEntity)
.where("id=:id", { id: 1 })
.execute()
console.log(result)
- 5、创建关系查询
const result = await getConnection()
.createQueryBuilder(UserEntity, "user")
.leftJoinAndMapMany("user.posts", Posts, "posts", "user.id=posts.userId")
.getMany()
console.log(JOSN.stringify(result))
queryBuilder 查询实战
async getRoles(searchRolesDto: SearchRolesDto): Promise<[RolesEntity[], number]> {
const { page = 1, pageSize = 20, roleName, creator } = searchRolesDto
// 目前页面设置 查询 角色名称 创建者
this.toolsService.checkPage(page, pageSize) // 校验 page,pageSize
const queryConditionList = ["roles.isDel=:isDel"] // 初始查询条件 是否删除
if (roleName) {
queryConditionList.push("roles.name LIKE :name") // 如果有用户名称 添加模糊查询
}
if (creator) {
queryConditionList.push("roles.creator=:creator") // 如果有创建者 添加精确查询
}
const queryCondition = queryConditionList.join(" AND ") // 拼接查询条件
return await getConnection()
.createQueryBuilder(RolesEntity, "roles")
.select()
.andWhere(queryCondition, { isDel: 0, name: `%${roleName}%`, creator }) // 设置查询内容
.skip((~~page - 1) * ~~pageSize) // 跳过多少条数据
.take(~~pageSize) // 获取pageSize条数据
.orderBy("roles.createdAt", "DESC") // 根据创建时间 倒序
.printSql() // 打印sql语句
.getManyAndCount() // 获取列表数据 和 总数
}