mapper.xml如下:


<select id="selectCkspcb" parameterType="java.util.Map"
resultType="java.util.Map"> SELECT
COALESCE (pg.goodsid, 0) spbm,
COALESCE (pg.goodsname, '') spmc,
COALESCE (
(
SELECT
classname
FROM
pub_goodsclass vv
WHERE
vv.classcode = (
SELECT
CASE
WHEN lent.len &lt; 4 THEN
''
ELSE
substr(lent.classcode, 0, 5)
END AS code
FROM
(
SELECT
LENGTH (ccc.classcode) len,
ccc.classcode
) lent
LIMIT 1 OFFSET 0
)
),
''
) zybm,
COALESCE (pb.brandname, '') pp,
COALESCE (pd.depotname, '') ck,
COALESCE (pg.goodscode, '') spcode,
COALESCE (ssgss.stockqty, 0) zmsl, COALESCE (
(
SELECT
SUM (taxprice * ssgss.stockqty)
FROM
sp_st_batch
WHERE
stgoodsid = ssgg.stgoodsid
AND depotid = ssgss.depotid
),
0
) zmcb,
CASE
WHEN ssgss.stockqty &gt; 0 THEN
(
SELECT
SUM (taxprice * ssgss.stockqty) / ssgss.stockqty
FROM
sp_st_batch
WHERE
stgoodsid = ssgg.stgoodsid
AND depotid = ssgss.depotid
)
ELSE
'0'
END cbjj,
ssgg.stgoodsid,
ssgss.depotid,
ssgg.stayinqty,
ssgg.stayoutqty,
ssgg.presaleqty
FROM
sp_st_goodsstock ssgss
LEFT JOIN sp_st_goods ssgg ON ssgss.stgoodsid = ssgg.stgoodsid
LEFT JOIN pub_depot pd ON ssgss.depotid = pd.depotid
LEFT JOIN pub_goods pg ON ssgg.goodsid = pg.goodsid
LEFT JOIN pub_brand pb ON pg.brandid = pb.brandid
LEFT JOIN pub_goodsclass ccc ON pg.goodsclassid = ccc.classid
WHERE
1 = 1
AND ssgss.enterpriseid = #{enterpriseid,jdbcType=NUMERIC}
<!-- 商品搜索框的商品编码条件查询 -->
<if test="spbm != null and spbm!='' ">
AND ssgg.stgoodsid=#{spbm,jdbcType=NUMERIC}
</if> <!-- 仓库编码查询 -->
<!--<if test="ckbms != null and ckbms !='' ">不能进行空字符串判断,不然报错-->
<if test="ckbms != null ">
AND ssgss.depotid in
<foreach collection="ckbms" item="ckbm" index="index" open="(" close=")" separator=","> #{ckbm}</foreach>
</if> <!-- 商品分类编码查询 -->
<if test="zybms != null ">
AND ccc.classid in
<foreach collection="zybms" item="zybm" index="index" open="(" close=")" separator=",">#{zybm}</foreach>
</if> <!-- 品牌编码查询 -->
<if test="pp != null and pp!='' ">
AND pb.brandid=#{pp,jdbcType=NUMERIC}
</if> <!-- 包括保管账为0 -->
<if test=" isZero!=0">
AND ssgss.stockqty &lt;&gt; 0
</if> <!-- 分页查询 -->
limit #{pageSize,jdbcType=NUMERIC} offset #{start,jdbcType=NUMERIC}
</select>

 

其中仓库编码和商品分类编码都使用了foreach进行迭代循环,页面jsp场景如下:

业务需求中需要查询多个仓库和商品分类的值,所以在页面将仓库和分类的id值用逗号隔开,以一串string传入后台,并将其拆解成List<Integer>或者List<String>,最后塞进map里面传到xml。

例如:

controller

@RequestMapping(value = { "reportform/queryData" }, method = { RequestMethod.GET,
RequestMethod.POST })
@ResponseBody
public JsonResult queryData(
ModelMap model,
@RequestParam(value = "enterpriseid", required = false) Integer enterpriseid,
@RequestParam(value = "pageSize", required = false,defaultValue ="4") Integer pageSize,
@RequestParam(value = "pageNo", required = false,defaultValue="1") Integer pageNo,
@RequestParam(value = "spbm", required = false) Long spbm,
@RequestParam(value = "ckbm", required = false) String ckbm,
@RequestParam(value = "zybm", required = false) String zybm,
@RequestParam(value = "pp", required = false) Long pp,
@RequestParam(value = "spmc", required = false) String spmc,
@RequestParam(value = "ck", required = false) String ck,
@RequestParam(value = "zmsl", required = false) Integer zmsl,
@RequestParam(value = "zmcb", required = false) String zmcb,
@RequestParam(value = "cbjj", required = false) String cbjj,
@RequestParam(value = "jyfs", required = false) String jyfs,
@RequestParam(value = "jglx", required = false) String jglx,
@RequestParam(value = "spsx", required = false) String spsx,
@RequestParam(value = "isZero", required = false) Integer isZero
) { JsonResult jrs=null;
try {
List<Integer> ckbms = tranStrToListOfInter(ckbm);
List<Integer> zybms = tranStrToListOfInter(zybm); PageRequest pageRequest = new PageRequest(pageNo-1, pageSize);
Page<Map<String, Object>> resultList=spStGoodFacade.selectCkspcb(enterpriseid,pageRequest,ckbms,spbm,zybms,pp,spmc,ck,spsx,jglx,jyfs,zybm,isZero,zmsl);
jrs=JsonResult.createSuccess();
jrs.addData(resultList);
} catch (Exception e) {
e.printStackTrace();
}
return jrs;
}
/**
* 将前台输入框的多选字符串转为List
* @param str
* @return
*/
public List<Integer> tranStrToListOfInter(String str){
if(str!=null && str!=""){
String[] sx=str.split(",");
List<Integer> listx=new ArrayList<Integer>();
for(int i=0;i<sx.length;i++){
listx.add(Integer.valueOf(sx[i]));
}
return listx;
}else{
return null;
}
}

service

public  Page<Map<String, Object>> selectCkspcb(Integer enterpriseid,PageRequest pageRequest,List ckbms,Long spbm,List zybms,Long pp,String spmc,String ck,String spsx,String jglx,String jyfs,String zybm,Integer isZero,Integer zmsl){

        Map<String, Object> dataMap= new HashMap<String, Object>();

        int offset = pageRequest.getOffset();
int pageSize = pageRequest.getPageSize(); dataMap.put("pageSize", pageSize);
dataMap.put("start",offset);
dataMap.put("enterpriseid", enterpriseid); dataMap.put("ckbms",ckbms);
dataMap.put("spbm",spbm);
dataMap.put("zybms", zybms);
dataMap.put("pp",pp); dataMap.put("ck", ck);
dataMap.put("spmc", spmc);
dataMap.put("isZero",isZero);
dataMap.put("zybm",zybm);
dataMap.put("jyfs",jyfs);
dataMap.put("jglx",jglx);
dataMap.put("spsx",spsx); Integer total= spStGoodDao.selectCkspcbTotalCount(dataMap);//获取总单记录数
List<Map<String, Object>> resultList= spStGoodDao.selectCkspcb(dataMap);//获取总单记录
List<Map<String, Object>> sum = spStGoodDao.selectCkspcbTotalZMSL(dataMap);
resultList.addAll(sum); Page<Map<String, Object>> page=null; if(resultList!=null && resultList.size()>0 && total!=null){
page = new PageImpl<Map<String, Object>>(resultList, pageRequest, total);
} return page; }

【Mybatis】<foreach>标签在mybatis中的使用的更多相关文章

  1. Mybatis foreach标签含义

    背景 考虑以下场景: InfoTable(信息表): Name Gender Age Score 张三 男 21 90 李四 女 20 87 王五 男 22 92 赵六 女 19 94 孙七 女 23 ...

  2. mybatis <forEach>标签的使用

    MyBatis<forEach>标签的使用 你可以传递一个 List 实例或者数组作为参数对象传给 MyBatis.当你这么做的时候,MyBatis 会自动将它包装在一个 Map 中,用名 ...

  3. MyBatis foreach标签遍历数组

    有时候开发中需要根据多个ID去查询,可以将ID封装为List或者数组然后使用MyBatis中的foreach标签构建in条件. 这里我将ID封装为String[]作为参数. <select id ...

  4. mybatis foreach标签

    一.批量插入数据 示例:添加订单商品表 1.模型层的相应代码 /** * 添加订单商品表 * @param ordergoods * @return */ public boolean addOrde ...

  5. MyBatis foreach标签的用法

    From<MyBatis从入门到精通> 一.foreach实现in集合 1.映射文件中添加的代码: <!-- 4.4 foreach用法 SQL语句有时会使用IN关键字,例如id i ...

  6. mybatis foreach标签的解释 与常用之处

    情景:查询数据库中文章的相关文章   文章为一个表 字段tags为相关文章字符串中间用','逗号进行啦分割 查询完一个文章后可以把tags字段构造为一个List<String> 然后利用这 ...

  7. 【数据库_Mysql】<foreach>标签在Mysql中的使用

    foreach属性 属性 描述 item 循环体中的具体对象.支持属性的点路径访问,如item.age,item.info.details.具体说明:在list和数组中是其中的对象,在map中是val ...

  8. Mybatis批量insert 返回主键值和foreach标签详解

    Mybatis批量insert 返回主键 Mybatis从3.3.1版本开始,支持批量插入后返回主键ID.首先对于支持自增主键的数据库使用useGenerateKeys和keyProperty,对于不 ...

  9. mybatis <where>、<set>、<trim>、<sql>、<foreach>标签的使用

    转:http://www.cnblogs.com/lixiujie/p/5766669.html <resultMap>标签的使用:这个类似于hibernte用于映射我们创建的vo对象与数 ...

随机推荐

  1. day4 边缘检测Canny

    1.canny边缘检测 # coding=utf-8 import cv2 import numpy as np filename = 'woman.JPEG' #读入图像,以灰度格式 img = c ...

  2. 质造未来,首届腾讯WeTest技术交流开放日成功举办

    WeTest 导读 北京时间12月21日下午1点整,2018年度腾讯WeTest技术交流开放日在上海举办.盛大.巨人.电魂.bilibili.方趣等十余家来自不同优秀企业的测试技术负责人均来到现场,共 ...

  3. XAF-如何修改内置的编辑器(Property Editor)

    本示例演示在web/win中给 日期选择控制显示出一个时钟及修改时间的控件.效果如下: 如果你装了XAF在这个路径中已经有了这个示例: %PUBLIC%\Documents\DevExpress De ...

  4. 180724-统计JVM进程中线程数两种方式小记

    I. 统计进程中的线程数 相关系列博文推荐: 180711-JVM定位分析CPU性能消耗 180704-JDK常用监控参数 jvm调优的工具介绍 1. proc查询 /proc 目录以可读文本文件形式 ...

  5. MySQL☞视图

    emmm,我本来最先也没注意到视图,然后再某个群里突然说起了视图,吓得本菜鸟赶紧连牛的不敢吹了,只好去科普一下,才好继续去吹牛. 什么是视图: 视图是一张虚拟的表,从视图中查看一张或多张表中的数据. ...

  6. Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) E. Down or Right

    从(1,1,n,n)每次只变一个坐标,进行询问. 如果问到对角线有距离限制, 再从(1,1,n/2,n/2)询问到(n/2,n/2,n,n) 记住前半部分贪心忘上走,后本部分贪心往右走 因为最后的路线 ...

  7. python之奇思妙想

    一.概述 本篇主要介绍自己平常所遇到的各种有趣的关于python的简短例子 二.正文 chapter 1 解决思路: s='{:,.2f}'.format(100000.0) print(s) cod ...

  8. 《图解 HTTP 》阅读 —— 第四章

    第4章 返回结果的HTTP状态码 1XX 接收的请求正在处理 2XX 请求被处理 200 请求成功 204 请求成功,但是没有返回数据 206 客户端进行了范围请求 3XX 重定向 301 永久性重定 ...

  9. while read读取文本内容

    读取文件给 while 循环 方式一: exec <FILE while read line do cmd done 方式二: cat FILE_PATH |while read line do ...

  10. CentOS-6.x系列查看cpu核数

    使用CentOS7.x使用习惯了后用top命令,然后按1就可以查看相关的cpu核心数等相关信息 相关概念: 物理CPU:实际Server中插槽上的CPU个数. 物理cpu数量:可以数不重复的 phys ...