一种是根据entity实体使用
import { HttpException,Injectable } from '@nestjs/common';
import { UserEntity } from './user.entity';
import { Repository} from 'typeorm';
import { InjectRepository} from '@nestjs/typeorm';
/*
* 在构造器里边进行定义
*/
@Injectable()
export class UserService {
constructor(
@InjectRepository(UserEntity)
private readonly userRepository: Repository<UserEntity>,
) { }
/*
* 查询一个数据 使用findOne where 是选择的条件
*/
async findOne(id: string) {
return await this.userRepository.findOne({ where: { id } })
}
/*
* 新增一条数据需要运用到 create save
*/
async Register(post: Partial<UserEntity>): Promise<{}> {
const { LoginName } = post;
const user = await this.userRepository.findOne({ where: { LoginName } });
if (user) {
throw new HttpException('账号已存在');
}
const newUser = await this.userRepository.create(post);
return this.userRepository.save(newUser);
}
/*
* 修改数据 merge save
*/
async UpdateUserName(post, userInfo) {
const { id } = userInfo;
const { userName } = post;
const user = await this.userRepository.findOne({ where: { id } });
if (user && userName) {
const updatePost = this.userRepository.merge(user, {
userName : userName,
});
await this.userRepository.save(updatePost);
}
}
/*
* 删除数据 delete
*/
async deleteUserById(post, userInfo): Promise<{}> {
this.userRepository.delete({ id });
}
/*
* 获取列表的数据
*/
async GetUserList(post) {
const { pagenum = 1, pagesize = 10, keyword } = post;
const qb = this.userRepository.createQueryBuilder('user'); // qb实体
// 如果有关键字,进行账号模糊查询
if (keyword) {
qb.where({
account: Like(`%${keyword}%`),
});
}
// 定义要返回的字段
qb.select([
'user.id',
'user.name',
'user.userName',
'user.create_time',
'user.update_time',
'user.delete_time',
]); // 需要的属性
qb.where("user.id = :id", { id: 1 }) // 如果需要增加条件语句
qb.orderBy('user.create_time', 'ASC'); // 'ASC' 升序 'DESC' 降序
const count = await qb.getCount(); // 查总数
qb.offset(pagesize * (pagenum - 1)); // 偏移位置
qb.limit(pagesize); // 条数
const list = await qb.getMany(); // 获取分页的用户数据
return {
list,
count
}
}
}
一种是使用EntityManager运用
import { EntityManager } from 'typeorm';
/*
* 联表查询
*/
async GetTestData(query) {
let { page, pageSize } = query
let list = await this.entityManager.query(
`
SELECT
u.id,
u.code,
s.name,
m.name trackBy
FROM test u
LEFT JOIN test1 s ON s.code=u.supplier_code
LEFT JOIN test2 m ON m.user_id=u.track_user_id
where u.id != 274
LIMIT ${page - 1}, ${pageSize};
`
)
let count = await this.entityManager.query(
`
SELECT COUNT(*) AS count FROM srm_purchase WHERE id != 274
`
)
return {
list,
count: count[0].count
}
}