1.业务代码
@GetMapping("/list") public TableDataInfo list(JsnhRoomCategoriesSearch search) { try { startPage(); if(StringUtils.isEmpty(search.getDeleted())){ search.setDeleted("F"); //默认查询的是未删除的(不是编辑的历史) } List<JsnhRoomCategoriesDetailResult> list = jsnhRoomCategoriesService.selectJsnhRoomCategoriesBycondition(search); return getDataTable(list); }catch (Exception e){ e.printStackTrace(); } TableDataInfo t = new TableDataInfo(); t.setCode(HttpStatus.ERROR); t.setMsg("系统内部错误"); t.setRows(new ArrayList<>()); return new TableDataInfo(); }
@Override public List<JsnhRoomCategoriesDetailResult> selectJsnhRoomCategoriesBycondition(JsnhRoomCategoriesSearch search) { List<JsnhRoomCategoriesDetailResult> li = jsnhRoomCategoriesMapper.selectJsnhRoomCategoriesDetailBycondition(search); if(StringUtils.collectIsNotEmpty(li)){ List<JsnhRoomCategoriesDetailResult> collect = li.stream().map(x -> { x.setImgUrl(); //x.setRoom(); return x; }).collect(Collectors.toList()); return collect; } return li; }
注意:List<JsnhRoomCategoriesDetailResult> li = jsnhRoomCategoriesMapper.selectJsnhRoomCategoriesDetailBycondition(search);查询返回列表,后面对返回结果使用stream进行了处理,返回了新的集合
在controller里面 调用: return getDataTable(list);
protected TableDataInfo getDataTable(List<?> list) { TableDataInfo rspData = new TableDataInfo(); rspData.setCode(HttpStatus.SUCCESS); rspData.setMsg("查询成功"); rspData.setRows(list); rspData.setTotal(new PageInfo(list).getTotal()); return rspData; }
public PageInfo(List<T> list) { this(list, DEFAULT_NAVIGATE_PAGES); }
public PageInfo(List<T> list, int navigatePages) { super(list); if (list instanceof Page) { Page page = (Page) list; this.pageNum = page.getPageNum(); this.pageSize = page.getPageSize(); this.pages = page.getPages(); this.size = page.size(); //由于结果是>startRow的,所以实际的需要+1 if (this.size == 0) { this.startRow = 0; this.endRow = 0; } else { this.startRow = page.getStartRow() + 1; //计算实际的endRow(最后一页的时候特殊) this.endRow = this.startRow - 1 + this.size; } } else if (list instanceof Collection) { this.pageNum = 1; this.pageSize = list.size(); this.pages = this.pageSize > 0 ? 1 : 0; this.size = list.size(); this.startRow = 0; this.endRow = list.size() > 0 ? list.size() - 1 : 0; } if (list instanceof Collection) { calcByNavigatePages(navigatePages); } }
super(list);
public PageSerializable(List<T> list) { this.list = list; if(list instanceof Page){ this.total = ((Page)list).getTotal(); } else { this.total = list.size(); } }
super(list);这里有一个判断 list instanceof Page,stream处理后返回的新的list在这里判断返回的是false,所以取的total是list的size,而不是this.total = ((Page)list).getTotal();所以返回的total存在问题
把业务类修改下,对sql查询返回的结果集合直接处理,而不是使用stream处理形成新的集合。这样子list instanceof Page判断就为true。total取的就是this.total = ((Page)list).getTotal()的值
@Override public List<JsnhRoomCategoriesDetailResult> selectJsnhRoomCategoriesBycondition(JsnhRoomCategoriesSearch search) { List<JsnhRoomCategoriesDetailResult> li = jsnhRoomCategoriesMapper.selectJsnhRoomCategoriesDetailBycondition(search); if(StringUtils.collectIsNotEmpty(li)){ for (JsnhRoomCategoriesDetailResult x:li) { x.setImgUrl(); } } return li; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?