在项目中,总是会有什么什么列表查询,然后还要求根据类型分类查询,有时候发现不同类型关联的表不相同,想要获得的东西也不相同,之前我查询方法总是采用union 将几个相关表连接起来,这样造成的问题是,压力全部在数据库上,
后来根据领导的建议,我将相同的基表先查出来,然后,采用for循环将不同关联的表按条件进行查询关联设置值,这样做就可以将数据库大量关联表查询的压力降低并转移出来,然后在service层中进行for循环操作,如果在service层中分页,也就是一个页码数量的循环,压力一下子就小了。
但是也存在一个问题就是综合查询时候,有的产品要求模糊查询,模糊的字段比较多,比如要求模糊基表以外的一些字段,就不能模糊了,因为我们已经把这些值放在service层中根据条件来添加到相关条目中的。
具体要求如何,怎么操作,就看产品和后端如何讨论确定了。
转移到service层的代码如下:主要体现在for循环中不同类型连表不同,如类型是12,则关联account表和gadleeOrder表,查出数据后设置进相应的那一条message中,如果是类型16,则关联device相关表然后查处device相关信息设置到相应那一条的message中。
@Override
public PageInfo<Message> userSelectMessageList(Map<String,Object> paramMap) {
Integer pageNum = (Integer) paramMap.get("pageNum");
Integer pageSize = (Integer) paramMap.get("pageSize");
Integer messageType = (Integer) paramMap.get("messageType");
PageHelper.startPage(pageNum, pageSize);
if(messageType==0){
List<Message> list = messageMapper.userSelectMessageList0(paramMap);
Integer startRow = (pageNum-1)*pageSize+1;
Integer endRow = pageNum*pageSize<list.size()?pageNum:list.size();
for(int i=startRow;i<=endRow;i++){
if(list.get(i-1).getInfoType()==12){
Integer number = deviceMapper.getDeviceNumberByOrderId(list.get(i-1).getValue1());
Account account = accountMapper.selectByOrderId(list.get(i-1).getValue1());
GadleeOrder gadleeOrder = gadleeOrderMapper.selectByPrimaryKey(list.get(i-1).getValue1());
if(account!=null){
list.get(i-1).setName(account.getUserName());//用户名称
}
if(gadleeOrder!=null){
list.get(i-1).setGadleeOrder(gadleeOrder);
}
if(number!=null){
list.get(i-1).setNumber(number.toString());//订单下设备数量
}
}else{
Device device = deviceMapper.selectByDeviceRepairId(list.get(i-1).getValue1());
if(device!=null){
list.get(i-1).setName(device.getDeviceName());//设备名称
list.get(i-1).setNumber(device.getModel());//设备型号
}
}
}
return new PageInfo<Message>(list);
}
if(messageType==12){
List<Message> list = messageMapper.userSelectMessageList12(paramMap);
Integer startRow = (pageNum-1)*pageSize+1;
Integer endRow = pageNum*pageSize<list.size()?pageNum:list.size();
for(int i=startRow;i<=endRow;i++){
Integer number = deviceMapper.getDeviceNumberByOrderId(list.get(i-1).getValue1());
list.get(i-1).setNumber(number.toString());
}
return new PageInfo<Message>(list);
}
if(messageType==16){
List<Message> list = messageMapper.userSelectMessageList16(paramMap);
return new PageInfo<Message>(list);
}
return null;
}