记录下typeorm中偏门用法

一、查询的时候定义别名

return await getConnection().createQueryBuilder(WeiXinUserTicketEntity, 'userTicket')
  // .select(['userTicket.id', 'userTicket.userId', 'userTicket.activityTitle', 'userTicket.ticketName'])
  // 第一个字段是查询的,第二个是别名
  .select('userTicket.userId', 'user_id')
  .addSelect('userTicket.activityTitle', 'activity_title')
  .addSelect('userTicket.ticketName', 'ticket_name')
  .getRawMany()

二、连表查询的时候只查询出几个字段(方式一)

return await getConnection().createQueryBuilder(WeiXinUserTicketEntity, 'userTicket')
  // 第一个字段是查询的,第二个是别名
  .select('userTicket.userId', 'user_id')
  .addSelect('userTicket.activityTitle', 'activity_title')
  .addSelect('userTicket.ticketName', 'ticket_name')
	// 方式一、连表查询一个字段
  .addSelect(s => s.select('status').from(OrderListEntity, 'orderList').where('userTicket.orderListId=orderList.id'), 'status11')
  .addSelect(s => s.select('id').from('order_list', 'orderList').where('userTicket.orderListId=orderList.id'), 'orderListId')
  .addSelect(s => s.select('price').from('order_list', 'orderList').where('userTicket.orderListId=orderList.id'), 'price')
  .getRawMany()
return await getConnection()
   .createQueryBuilder(SponsorEntity, 'sponsor')
   .select('sponsor.id', 'id')
   .addSelect('sponsor.name', 'name')
   .addSelect('sponsor.cityId', 'cityId')
   .leftJoinAndMapOne('sponsor.accountList', qb => 
     qb.select('id', 'id')
     .addSelect('username', 'username')
     // 注意这里要用数据库的字段名,不能用sponsorId
     .addSelect('sponsor_id', 'sponsorId')
     .from(AccountEntity, 'account'), 'account', 'sponsor.id = account.sponsorId') 
   .printSql()
   .getRawMany();

三、连表查询的时候只查询出几个字段(方式二)

return await getConnection().createQueryBuilder(WeiXinUserTicketEntity, 'userTicket')
	// .select(['userTicket.id', 'userTicket.userId', 'userTicket.activityTitle', 'userTicket.ticketName'])
	// 第一个字段是查询的,第二个是别名
  .select('userTicket.userId', 'user_id')
  .addSelect('userTicket.activityTitle', 'activity_title')
  .addSelect('userTicket.ticketName', 'ticket_name')
	// 方式二,连表查询几个字段
  .leftJoinAndMapOne('userTicket.orderList', qb =>
     qb.select(['id', 'price', 'ticket_no', 'status'])
       .from(OrderListEntity, 'orderList'), 'orderList', 		      "userTicket.orderListId=orderList.id")
  .getRawMany()

四、连表查询并且增加case生成字段

return await getConnection().createQueryBuilder(WeiXinUserTicketEntity, 'userTicket')
	// .select(['userTicket.id', 'userTicket.userId', 'userTicket.activityTitle', 'userTicket.ticketName'])
	// 第一个字段是查询的,第二个是别名
  .select('userTicket.userId', 'user_id')
  .addSelect('userTicket.id', 'id')
  .addSelect('userTicket.activityTitle', 'activity_title')
  .addSelect('userTicket.ticketName', 'ticket_name')
  .addSelect(`
    case
      when now() < userTicket.activity_end_time and orderList.status = 1 then 1
      when orderList.status = 5 then 2
      when now() > userTicket.activity_end_time and orderList.status=1 then 3
      when orderList.status = 2 then 4
      when orderList.status = 3 then 5
      when orderList.status = 4 then 6
      else 7
    end
  `, 'statusNum')
  .addSelect(`
    case
      when now() < userTicket.activity_end_time and orderList.status = 1 then '有效'
      when orderList.status = 5 then '已使用'
      when now() > userTicket.activity_end_time and orderList.status=1 then '已过期'
      when orderList.status = 2 then '支付失败'
      when orderList.status = 3 then '取消订单'
      when orderList.status = 4 then '退款'
      else '未知状态单'
    end
  `, 'statusStr')
  .leftJoinAndMapOne('userTicket.orderList', qb =>
      qb.select(['id', 'price', 'ticket_no', 'status'])
        .from(OrderListEntity, 'orderList'), 'orderList', "userTicket.orderListId=orderList.id")
  .orderBy({
    
     'statusNum': 'ASC', 'userTicket.id': 'DESC', })
  .getRawAndEntities()

五、一次性向数据库插入多条数据

const data = [
  {
    
    
    userId: 1,
    activityTitle: '张三',
    activityEndTime: '2020-12-20 23:20:12',
    ticketName: '张三',
    ticketType: '张三',
    orderListId: 1,
    ticketId: 1,
  },
  {
    
    
    userId: 2,
    activityTitle: '张三1',
    activityEndTime: '2020-12-20 23:20:12',
    ticketName: '张三1',
    ticketType: '张三1',
    orderListId: 1,
    ticketId: 1,
  }
];
return this.weiXinUserTicketRepository.insert(data);

六、查询是否存在数据

try {
    
    
  return this.weiXinUserTicketRepository.findOneOrFail(1);
} catch (e) {
    
    
  console.log(e);
  throw new HttpException(e, HttpStatus.OK);
}

七、in语句的使用

const danceList = await getConnection().createQueryBuilder(DanceEntity, 'dance')
  .select(['dance.id', 'dance.name'])
  .where('dance.id in (:...dances) and dance.isDel=0', {
    
     dances: [1,2,3] })
  .printSql()
  .getMany();

猜你喜欢

转载自blog.csdn.net/kuangshp128/article/details/113566451
今日推荐