MyBatis-Plus 自定义 SQL 实现多表复杂查询

it2024-06-29  42

发起调用的 service 部分

public IPage<ElevatorMonitorStatusVO> listByCriteria(int page, int size, String registrationCode, String administrativeRegion, String usingCorp, String installLocation, String maintenanceCorpName, String deviceType) { Page<ElevatorMonitorStatusVO> queryPage = new Page<>(page, size); QueryWrapper<Object> queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(registrationCode), "t_elevator.registration_code", registrationCode); queryWrapper.like(StringUtils.isNotBlank(administrativeRegion), "t_using_elevator_corporation.administrative_region", administrativeRegion); queryWrapper.like(StringUtils.isNotBlank(usingCorp), "t_using_elevator_corporation.`name`", usingCorp); queryWrapper.like(StringUtils.isNotBlank(installLocation), "t_elevator.installation_location", installLocation); queryWrapper.like(StringUtils.isNotBlank(maintenanceCorpName), "t_maintenance_corporation.corp_name", maintenanceCorpName); queryWrapper.like(StringUtils.isNotBlank(deviceType), "t_device.device_type", deviceType); IPage<ElevatorMonitorStatusVO> pageResult = elevatorService.queryRealtime(queryPage, queryWrapper); List<ElevatorMonitorStatusVO> list = pageResult.getRecords(); if (CollectionUtils.isNotEmpty(list)) { Map<String, String> realtimeStatusMap = statusMonitorService.getRealtimeStatus().stream() .collect(Collectors.toMap(ElevatorRealtimeStatus::getRegistrationCode, ElevatorRealtimeStatus::getUpdateTime)); list.forEach(item -> assembleStatus(realtimeStatusMap, item)); } return pageResult; }

service 部分

@Transactional(propagation = Propagation.SUPPORTS) @Override public IPage<ElevatorMonitorStatusVO> queryRealtime(Page<ElevatorMonitorStatusVO> page, Wrapper<Object> wrapper) { return elevatorMonitorStatusVOMapper.queryRealtime(page, wrapper); }

mapper 部分

public interface ElevatorMonitorStatusVOMapper extends BaseMapper<ElevatorMonitorStatusVO> { IPage<ElevatorMonitorStatusVO> queryRealtime(Page<ElevatorMonitorStatusVO> page, @Param(Constants.WRAPPER) Wrapper<Object> wrapper); } <select id="queryRealtime" resultType="cn.yangxianda.elevator.vo.ElevatorMonitorStatusVO" parameterType="map"> SELECT t_elevator.registration_code AS registrationCode, t_using_elevator_corporation.administrative_region AS administrativeRegion, t_using_elevator_corporation.`name` AS usingCorp, t_elevator.installation_location AS installLocation, t_maintenance_corporation.corp_name AS maintenanceCorpName, t_device.device_type AS deviceType, t_device.communication_line AS communicateLine FROM elevator t_elevator LEFT JOIN using_elevator_corporation t_using_elevator_corporation ON t_elevator.using_elevator_corporation_id = t_using_elevator_corporation.using_elevator_corporation_id LEFT JOIN maintenance_corporation t_maintenance_corporation ON t_elevator.maintenance_corporation_id = t_maintenance_corporation.corp_id LEFT JOIN elevator_device_relat t_elevator_device_relat ON t_elevator.elevator_id = t_elevator_device_relat.elevator_id LEFT JOIN device t_device ON t_elevator_device_relat.device_id = t_device.device_id ${ew.customSqlSegment} </select>
最新回复(0)