Java-多表联查
前提:由于我当前页面显示的数据 是在其他两个表中 只有ID可以使用
1、分别对两个表进行操作,将List转为Map对象
//查询项目表
List<BudgetProjectInfo> budgetProjectInfoList = budgetProjectInfoService.list();
Map<String,BudgetProjectInfo> schemMap = budgetProjectInfoList.stream().collect(Collectors.toMap(BudgetProjectInfo::getId,Function.identity()));
//查询部门表
List<ComDept> comDeptList = comDeptServiceImpl.list();
Map<String,ComDept> deptMap = comDeptList.stream().collect(Collectors.toMap(ComDept::getId, Function.identity()));
2、设置页面所需要的数据,筛选条件
QueryWrapper<BudgetSchemeInfo> schemeQuery = Wrappers.query();
schemeQuery.eq(StringUtils.isNotEmpty(schemeInfo.getDeclareYear()), BudgetSchemeInfoUtil.COLUMN_DECLARE_YEAR,schemeInfo.getDeclareYear())
.eq(StringUtils.isNotEmpty(schemeInfo.getDepId()),BudgetSchemeInfoUtil.COLUMN_DEP_ID,schemeInfo.getDepId())
.eq(StringUtils.isNotEmpty(schemeInfo.getDataSource()),BudgetSchemeInfoUtil.COLUMN_DATA_SOURCE,schemeInfo.getDataSource())
.eq(StringUtils.isNotEmpty(schemeInfo.getSchoolCode()),BudgetSchemeInfoUtil.COLUMN_SCHOOL_CODE,schemeInfo.getSchoolCode());
Page<BudgetSchemeInfo> page = new Page<>(schemeInfo.getPageCurrent(), schemeInfo.getPageSize());
IPage<BudgetSchemeInfo> budgetSchemeInfoIPage = this.page(page, schemeQuery);
3、写VO,例如(里面写的是自己数据库没有,要调用其他数据库的数据的值,记得导入Get和Set,此处略)
/** 项目编号**/
private String proCode;
/** 项目名称**/
private String proName;
/** 部门编号**/
private String deptNum;
/** 部门名称**/
private String deptName;
/** 项目状态**/
private String proStatus;
4、将实体对象转换为VO
List<BudgetSchemeVO> fmsAtInfoVOList = ObjectParamCopyUtil.copyList(budgetSchemeInfoIPage.getRecords(),BudgetSchemeVO.class);
5、循环获取数据(根据ProId找项目表中数据,根据DepId找部门表中数据)
for (BudgetSchemeVO b:fmsAtInfoVOList){
b.setProCode(schemMap.get(b.getProId()).getProNo());
b.setProName(schemMap.get(b.getProId()).getProName());
if(StringUtils.isNotEmpty(deptMap.get(b.getDepId()).getDeptNum())) {
b.setDeptNum(deptMap.get(b.getDepId()).getDeptNum());
}
//b.setDeptNum(deptMap.get(b.getDepId()).getDeptNum());
b.setDeptName(deptMap.get(b.getDepId()).getDeptName());
b.setProStatus(schemMap.get(b.getProId()).getStatus());
}
6、返回数据
return ResultJsonUtil.returnResult(ResultEnum.SUCCESS, VoUtilFactory.convertToVoPage(fmsAtInfoVOList,budgetSchemeInfoIPage));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix