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

项目练习:使用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>

四、报表效果

在这里插入图片描述

相关文章:

  • 【Linux shell】条件判断和流程控制
  • 第十四章 Linux实操篇——进程管理(重点)
  • 网络原理8 - HTTP协议1
  • AI Agent 核心策略解析:Function Calling 与 ReAct 的设计哲学与应用实践
  • python打卡day51
  • 计算机视觉与深度学习 | 两种经典的低照度增强算法:多尺度Retinex(MSR)和自适应直方图均衡化(CLAHE)
  • 我们来学mysql -- keepalive主从高可用
  • YOLOv1 技术详解:目标检测的实时革命
  • 为何AI推理正推动云计算从集中式向分布式转型
  • React Native UI 框架与动画系统:打造专业移动应用界面
  • 网络请求与本地存储:Axios 与 AsyncStorage 在 React Native 中的应用
  • 深入偏微分方程的世界-AI云计算
  • 开源 java android app 开发(十二)封库.aar
  • 基于React Native的HarmonyOS 5.0休闲娱乐类应用开发
  • Android的Dalvik和ART
  • 【DETR目标检测】ISTD-DETR:一种基于DETR与超分辨率技术的红外小目标检测深度学习算法
  • 修仙处于平凡
  • 华为服务器obsutil使用方法
  • 计算机网络:认证和授权 DNS 域名解析过程(如何转换为ip地址) http无状态 5**服务端错误相关的响应状态码 tcp某次握手丢失会有什么现象?
  • WPP 媒体推出基于人工智能的工具突破基于身份识别的定向模式
  • 企业网站建设价格/腾讯广告推广平台
  • 用python做网站的多吗/昆明seo推广外包
  • 西安网站seo收费/福州网站快速排名提升
  • 佛山做推广网站的/教育培训机构营销方案
  • 房地产app/网站关键词优化排名外包
  • 2018年淘宝客网站怎么做/创网站永久免费建站