sql查询结果多对多转为一对多返回前端
2024-08-28 14:17:29
企业表 ent_EnterpriseArchives 有id,企业名称 entName
veh_Vehicle 车辆表,有所属企业id companyId,车辆id,车牌号licPlate
目的是查询企业和车辆的树状结果。如下图,然后返回前端。
执行如下sql得到的结果是:【根据车牌号或者企业名称模糊查询】
SELECT ent_EnterpriseArchives.id entId, ent_EnterpriseArchives.entName entName, veh_Vehicle.id vehId, veh_Vehicle.licPlate vehPlate from ent_EnterpriseArchives JOIN veh_Vehicle on ent_EnterpriseArchives.id = veh_Vehicle.companyId and ( ent_EnterpriseArchives.entName like '%杭州%' or veh_Vehicle.licPlate like '%杭州%' ) ORDER BY ent_EnterpriseArchives.id
【上述数据结果为造的假数据】
所以要对这个sql的查询结果进行去重公司名称,返回前端树状结果。下面的代码即为处理过程:
public ResponseList enterpriseVehicleTree(String paramName, HttpSession session) { ResponseList response = new ResponseList(); List<Map<String,List<VehVehicleVO>>> resultList = new ArrayList<Map<String,List<VehVehicleVO>>>(); if(paramName == null) { paramName = ConstantUtil.EMPTYSTRING; } try { List<EnterpriseVehicleTreeVO> tempRes = baseMapper.enterpriseVehicleTree(paramName);//上述sql的查询结果 if(tempRes == null || tempRes.size() < ConstantUtil.INTNUM1) { return response; } Integer tempEntId = null; Map<String,List<VehVehicleVO>> tempMap = new HashMap<String, List<VehVehicleVO>>(); List<VehVehicleVO> tempListStr = new ArrayList<VehVehicleVO>(); for (int i = 0 ; i < tempRes.size(); i++) { EnterpriseVehicleTreeVO enterpriseVehicleTreeVO = tempRes.get(i); if(i == ConstantUtil.INTNUM0) { //第一家公司 tempEntId = enterpriseVehicleTreeVO.getEntId(); tempListStr.add( new VehVehicleVO(enterpriseVehicleTreeVO.getVehId(),enterpriseVehicleTreeVO.getVehLicplate())); tempMap.put(enterpriseVehicleTreeVO.getEntName(), tempListStr); if((i+1) == tempRes.size()) { resultList.add(tempMap); break; } }else { //还是同一家公司 if(tempEntId == enterpriseVehicleTreeVO.getEntId()) { tempListStr.add( new VehVehicleVO(enterpriseVehicleTreeVO.getVehId(),enterpriseVehicleTreeVO.getVehLicplate())); tempMap.put(enterpriseVehicleTreeVO.getEntName(), tempListStr); if((i+1) == tempRes.size()) { resultList.add(tempMap); } }else { //新的公司,先处理上一个公司的数据 resultList.add(tempMap); tempMap = null; //注意,这个地方不可以直接调用clear方法去清空,必须重新创建tempMap对象,否则后面的新数据就把之前已经存到list中的上个公司的数据给覆盖掉了 tempMap = new HashMap<String, List<VehVehicleVO>>(); tempListStr = null; //原因同上 tempListStr = new ArrayList<VehVehicleVO>(); tempEntId = enterpriseVehicleTreeVO.getEntId(); tempListStr.add( new VehVehicleVO(enterpriseVehicleTreeVO.getVehId(),enterpriseVehicleTreeVO.getVehLicplate())); tempMap.put(enterpriseVehicleTreeVO.getEntName(), tempListStr); if((i+1) == tempRes.size()) { resultList.add(tempMap); } } } } response.setObj(resultList); } catch (Exception e) { log.info("xxxxxxxxxxxxxxxxxxxxxx异常,==>e.getMessage:" + e.getMessage() + ",==>e.getStackTrace():" + e.getStackTrace()+ ",==>e:" + e); response.setSuccess(false).setMsg("xxxxxxxxxxxxxxxxxxxxxxxxx异常"); } return response; }
最终效果:
{ "success": true, "msg": "", "obj": [ { "杭州科大讯飞": [ { "id": 13, "licPlate": "豫QA3586" }, { "id": 14, "licPlate": "豫QA3585" }, { "id": 12, "licPlate": "豫QA3587" } ] }, { "杭州网易": [ { "id": 8, "licPlate": "浙A36W52" } ] } ] }
最新文章
- 我认为JS还可以改进的点
- 【笔记】ztree的使用
- TCP/IP之蓟辽督师
- smarty中section遍历数组
- centOS 一键php环境安装-php博弈
- 不重启mysql情况修改参数变量
- java中for循环的6种写法
- Swift入门教程:基本语法(四)
- ZOJ 3702 Gibonacci number(数学推导)
- 【Java基础】ArrayList工作原理
- Chris Richardson微服务翻译:重构单体服务为微服务
- 如何通过免费开源的ERP Odoo打造企业全员营销整体解决方案
- JAVA基础复习与总结<;五>; String类_File类_Date类
- LVS + HAProxy实现跨网负载均衡
- springmvc和mybatis整合关键配置
- RocketMQ 问题汇总
- 微信小程序支付签名老是失败,在官网的校验签名工具校验成功,老是返回签名失败
- mysql查看在线用户
- jQuery EasyUI 入门简介
- advance shading--BRDF
热门文章
- python+echarts==pycharts
- cf555e
- java开发系统内核:让内核从严重错误中恢复
- GCD BZOJ2818 [省队互测] 数学
- sql 面试题记录
- Android Studio 常用应用
- elemetnui 分页..解决 bug
- liunx php 安装 redis 扩展
- 应大数据时代而写了个磁力搜索的网页- WWW.MOVIH.COM 磁力
- D. Minimum Diameter Tree Round #528 (Div. 2)【树】