Java 多表联查

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));

posted on   糯米白白  阅读(166)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2022-10-26 VSCode下载地址
2022-10-26 npm 安装yarn

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示