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. gitlab在push代码的时候报错

    一.问题报错 gitlab在执行git pull origin master,拉取代码的时候报如下错误. $ git pull origin master remote: Counting objec ...

  2. 【MYSQL安装】mysql 5.6在centos6.4上的安装

    1.卸载系统自带的mysql [root@zhangmeng ~]# rpm -qa |grep mysql mysql-libs--.el6_3.x86_64 [root@zhangmeng ~]# ...

  3. 【一】H.264/MPEG-4 Part 10 White Paper 翻译之 Overview of H.264

    翻译版权所有,转载请注明出处~ xzrch@2018.09.14 ------------------------------------------------------------------- ...

  4. python学习-linux基本操作

    1.sudo 管理员root身份 2.mkdir 创建文件夹   touch 创建文件 3.rm 删除 4.chmod 赋予权限 r(读取):4 w(写):2 x(执行):1 rwx=7,r-x=5等 ...

  5. vue cli 3 +jquery

    const webpack = require('webpack')module.exports = { // baseUrl type:{string} default:'/' // 将部署应用程序 ...

  6. 实现属于自己的TensorFlow(一) - 计算图与前向传播

    前段时间因为课题需要使用了一段时间TensorFlow,感觉这种框架很有意思,除了可以搭建复杂的神经网络,也可以优化其他自己需要的计算模型,所以一直想自己学习一下写一个类似的图计算框架.前几天组会开完 ...

  7. 王者荣耀交流协会 - 第7次Scrum会议(第二周)

    1.例会照片 照片由王超(本人)拍摄,组内成员刘耀泽,高远博,王磊,王玉玲,王超,任思佳,袁玥全部到齐. 2.时间跨度: 2017年10月26日 17:05 — 17:47 ,总计42分钟. 3.地 ...

  8. 《linux内核与分析》第三周

    20135130王川东 实验:构造一个简单的Linux系统的MenuOS 命令:qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd root ...

  9. 20135313_exp4

    实验四      GUI界面的设计和运用 20135313吴子怡 一.实验目的 结合项目,为每个密码学算法设计能够提供使用者用户体验的操作界面,实现加解密.求得消息摘要的功能. 二.代码举例(备注:其 ...

  10. c# WPS DLL及其调用

    1.dll分享(含xsl及docx的dll) 链接:https://pan.baidu.com/s/1c1ImV14OndmvIb4W-_WL2A 密码:d2rx 2.方法: 1.先在类的前面(类外面 ...