这次代码里面呢,需要针对大量的附表进行批量插入
历史代码是这样的
//查询工序下的产出物料信息 QueryWrapper<A> proRouteProcessOutQueryWrapper = new QueryWrapper<>(); proRouteProcessOutQueryWrapper.eq("route_process_id", proRouteProcess.getId()); proRouteProcessOutQueryWrapper.eq("del_flag", "0"); List<ProRouteProcessOut> routeProcessOutList = proRouteProcessOutMapper.selectList(proRouteProcessOutQueryWrapper); //查询工序投入物料信息 QueryWrapper<B> proRouteProcessInQueryWrapper = new QueryWrapper<>(); proRouteProcessInQueryWrapper.eq("route_process_id", proRouteProcess.getId()); proRouteProcessInQueryWrapper.eq("del_flag", "0"); List<ProRouteProcessIn> routeProcessInList = proRouteProcessInMapper.selectList(proRouteProcessInQueryWrapper); //查询工序参数信息 QueryWrapper<C> proRouteProcessParamQueryWrapper = new QueryWrapper<>(); proRouteProcessParamQueryWrapper.eq("route_process_id", proRouteProcess.getId()); proRouteProcessParamQueryWrapper.eq("del_flag", "0"); List<ProRouteProcessParam> routeProcessParamList = proRouteProcessParamMapper.selectList(proRouteProcessParamQueryWrapper); //查询工序的文件信息 QueryWrapper<D> proRouteProcessFileQueryWrapper = new QueryWrapper<>(); proRouteProcessFileQueryWrapper.eq("route_process_id", proRouteProcess.getId()); proRouteProcessFileQueryWrapper.eq("del_flag", "0"); List<ProRouteProcessFile> routeProcessFileList = proRouteProcessFileMapper.selectList(proRouteProcessFileQueryWrapper);
里面存在大量的冗余信息,这个时候呢,Java8的Funcion就排上用场了,可以帮我们省略大量的重复代码。
先封装一个查询方法
// 封装查询逻辑的方法,接受具体的Mapper和查询条件构建器 public static <T> List<T> executeQuery(Function<QueryWrapper<T>, QueryWrapper<T>> queryCustomizer ,BaseMapper<T> mapper, List<Long> processIds) { QueryWrapper<T> queryWrapper = new QueryWrapper<>(); // 假设T有getRouteProcessId方法 queryWrapper.in("route_process_id", processIds); // 假设T继承了BaseEntity或类似的有getDelFlag方法的类 queryWrapper.eq("del_flag", DELETE_NO); // 应用自定义的查询条件构建器 queryWrapper = queryCustomizer.apply(queryWrapper); // 执行查询 return mapper.selectList(queryWrapper); }
接下来只需要传入我们的mapper就搞定了,简直不要太清爽
List<ProRouteProcessEquip> routeProcessEquipList = executeQuery( qw -> qw, proRouteProcessEquipMapper, processIds );