当前位置: 首页 > ds >正文

项目练习:使用mybatis的foreach标签,实现union all的拼接语句

文章目录

  • 一、需求说明
  • 二、需求分析
  • 三、代码实现
  • 四、报表效果

一、需求说明

在sql查询数据后,对数据分组统计。并最后进行总计。

二、需求分析

最终,我想用sql来实现这个统计和查询的功能。

那么,怎么又查询,又统计了?

就用到MySQL的union all关键字。

然后,通过mybatis把参数组装成list,传入,在利用foreach标签,循环拼接union all部分即可。

三、代码实现

Java代码

    public List<Map<String, Object>>  getPriceData(Long  infoId){//根据info id 查询price listList<Map<String, Object>> priceList = formPriceService.getVIds(infoId);List<Object> vids = new ArrayList<>();for (Map<String, Object> res : priceList) {vids.add(res.get("variety_id"));}Map<String, Object> params = new HashMap<>();params.put("infoId",infoId);params.put("vids",vids);List<Map<String, Object>> priceData = formPriceService.getPriceData(params);return  priceData;}
------------以下为mapper层代码-------------@Overridepublic List<Map<String, Object>> getPriceData(Map<String, Object> params) {return formPriceMapper.getPriceData(params);}@Overridepublic List<Map<String, Object>> getVIds(Long id) {return formPriceMapper.getVIds(id);}

xml代码
getVIds方法

<select id="getVIds" parameterType="Long" resultType="Map">SELECTdistinct price.variety_idFROM`rent_form_price` priceLEFT JOIN rent_form_info infoON	price.form_info_id = info.idLEFT JOIN rent_material_standard_temp stempON price.standard_id = stemp.idLEFT JOIN rent_material_variety_temp vtempON price.variety_id = vtemp.idLEFT JOIN rent_store_info storeON info.store_id = store.idWHERE price.form_info_id = #{formInfoId}</select>

getPriceData方法

    <select id="getPriceData" resultType="Map" parameterType="Map"><foreach collection="vids" item="vid" index="index" separator="union all">SELECTprice.variety_id,price.id,price.form_info_id,info.send_date,info.rent_begin_date,vtemp.variety_name,stemp.standard,price.number,price.rental_number,stemp.convert_amount,price.pound,store.store_name,price.note,stemp.rental_unitFROM`rent_form_price` priceLEFT JOIN rent_form_info info ON price.form_info_id = info.idLEFT JOIN rent_material_standard_temp stemp ON price.standard_id = stemp.idLEFT JOIN rent_material_variety_temp vtemp ON price.variety_id = vtemp.idLEFT JOIN rent_store_info store ON info.store_id = store.idWHEREprice.variety_id = #{vid}AND price.form_info_id = #{infoId}UNION ALLSELECT'','','','','',CONCAT(vtemp.variety_name,'小计:'),'',sum(price.number),sum(price.rental_number),'',sum(price.pound),'','',''FROMrent_form_price priceLEFT JOIN rent_material_variety_temp vtemp ON price.variety_id = vtemp.idWHEREprice.variety_id = #{vid}AND price.form_info_id = #{infoId}</foreach>UNION ALLSELECT'','','','','','本单总计:','',sum(price.number),sum(price.rental_number),'',sum(price.pound),'','',''FROMrent_form_price priceLEFT JOIN rent_material_variety_temp vtemp ON price.variety_id = vtemp.idWHEREform_info_id = #{infoId}</select>

四、报表效果

在这里插入图片描述

http://www.xdnf.cn/news/13694.html

相关文章:

  • Nacos快速入门:从安装到实战
  • MySQL 8.0 OCP 英文题库解析(十七)
  • 打砖块(洛谷)
  • 移动端 1px 问题解决方案
  • 从字节到对象的漂流---JavaIO流篇
  • 5. 相机拍摄简单构图
  • 1.9 Express
  • Flutter 常用组件详解:Text、Button、Image、ListView 和 GridView
  • c++中main函数执行完后还执行其它语句吗?
  • FreeRTOS互斥量
  • 面向异构系统的多面体编译优化关键技术研究——李颖颖博士
  • Linux 任务调度策略
  • 一数一源一标准的补充
  • 论文阅读:强化预训练
  • 强化学习入门:交叉熵方法实现CartPole智能体
  • 一个超强的推理增强大模型,开源了,本地部署
  • 跨网数据摆渡系统:破解数据流通难题的“标准答案”
  • 别人如何访问我的内网呢? 设置让外网访问内网本地服务器和指定端口应用的几种方式
  • 曼昆《经济学原理》第九版 第十八章生产要素市场
  • Vue Electron 使用来给若依系统打包成exe程序,出现登录成功但是不跳转页面(已解决)
  • Vue 中 data 选项:对象 vs 函数
  • Rust 学习笔记:通过异步实现并发
  • 【题解-洛谷】P2935 [USACO09JAN] Best Spot S
  • 算法训练第十五天
  • docker推荐应用汇总及部署实战
  • ComfyUI-安装
  • 不装 ROS 也能用 PyKDL!使用kdl_parser解析URDF并进行IK
  • Linux-进程间的通信
  • 大数据服务器的特点都指什么?
  • Python----OpenCV(图像处理——边界填充、图像融合、图像阈值、深拷贝与浅拷贝)