【Mybatis】<foreach>标签在mybatis中的使用
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 < 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 > 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 <> 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中的使用的更多相关文章
- Mybatis foreach标签含义
背景 考虑以下场景: InfoTable(信息表): Name Gender Age Score 张三 男 21 90 李四 女 20 87 王五 男 22 92 赵六 女 19 94 孙七 女 23 ...
- mybatis <forEach>标签的使用
MyBatis<forEach>标签的使用 你可以传递一个 List 实例或者数组作为参数对象传给 MyBatis.当你这么做的时候,MyBatis 会自动将它包装在一个 Map 中,用名 ...
- MyBatis foreach标签遍历数组
有时候开发中需要根据多个ID去查询,可以将ID封装为List或者数组然后使用MyBatis中的foreach标签构建in条件. 这里我将ID封装为String[]作为参数. <select id ...
- mybatis foreach标签
一.批量插入数据 示例:添加订单商品表 1.模型层的相应代码 /** * 添加订单商品表 * @param ordergoods * @return */ public boolean addOrde ...
- MyBatis foreach标签的用法
From<MyBatis从入门到精通> 一.foreach实现in集合 1.映射文件中添加的代码: <!-- 4.4 foreach用法 SQL语句有时会使用IN关键字,例如id i ...
- mybatis foreach标签的解释 与常用之处
情景:查询数据库中文章的相关文章 文章为一个表 字段tags为相关文章字符串中间用','逗号进行啦分割 查询完一个文章后可以把tags字段构造为一个List<String> 然后利用这 ...
- 【数据库_Mysql】<foreach>标签在Mysql中的使用
foreach属性 属性 描述 item 循环体中的具体对象.支持属性的点路径访问,如item.age,item.info.details.具体说明:在list和数组中是其中的对象,在map中是val ...
- Mybatis批量insert 返回主键值和foreach标签详解
Mybatis批量insert 返回主键 Mybatis从3.3.1版本开始,支持批量插入后返回主键ID.首先对于支持自增主键的数据库使用useGenerateKeys和keyProperty,对于不 ...
- mybatis <where>、<set>、<trim>、<sql>、<foreach>标签的使用
转:http://www.cnblogs.com/lixiujie/p/5766669.html <resultMap>标签的使用:这个类似于hibernte用于映射我们创建的vo对象与数 ...
随机推荐
- day4 边缘检测Canny
1.canny边缘检测 # coding=utf-8 import cv2 import numpy as np filename = 'woman.JPEG' #读入图像,以灰度格式 img = c ...
- 质造未来,首届腾讯WeTest技术交流开放日成功举办
WeTest 导读 北京时间12月21日下午1点整,2018年度腾讯WeTest技术交流开放日在上海举办.盛大.巨人.电魂.bilibili.方趣等十余家来自不同优秀企业的测试技术负责人均来到现场,共 ...
- XAF-如何修改内置的编辑器(Property Editor)
本示例演示在web/win中给 日期选择控制显示出一个时钟及修改时间的控件.效果如下: 如果你装了XAF在这个路径中已经有了这个示例: %PUBLIC%\Documents\DevExpress De ...
- 180724-统计JVM进程中线程数两种方式小记
I. 统计进程中的线程数 相关系列博文推荐: 180711-JVM定位分析CPU性能消耗 180704-JDK常用监控参数 jvm调优的工具介绍 1. proc查询 /proc 目录以可读文本文件形式 ...
- MySQL☞视图
emmm,我本来最先也没注意到视图,然后再某个群里突然说起了视图,吓得本菜鸟赶紧连牛的不敢吹了,只好去科普一下,才好继续去吹牛. 什么是视图: 视图是一张虚拟的表,从视图中查看一张或多张表中的数据. ...
- 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) 记住前半部分贪心忘上走,后本部分贪心往右走 因为最后的路线 ...
- python之奇思妙想
一.概述 本篇主要介绍自己平常所遇到的各种有趣的关于python的简短例子 二.正文 chapter 1 解决思路: s='{:,.2f}'.format(100000.0) print(s) cod ...
- 《图解 HTTP 》阅读 —— 第四章
第4章 返回结果的HTTP状态码 1XX 接收的请求正在处理 2XX 请求被处理 200 请求成功 204 请求成功,但是没有返回数据 206 客户端进行了范围请求 3XX 重定向 301 永久性重定 ...
- while read读取文本内容
读取文件给 while 循环 方式一: exec <FILE while read line do cmd done 方式二: cat FILE_PATH |while read line do ...
- CentOS-6.x系列查看cpu核数
使用CentOS7.x使用习惯了后用top命令,然后按1就可以查看相关的cpu核心数等相关信息 相关概念: 物理CPU:实际Server中插槽上的CPU个数. 物理cpu数量:可以数不重复的 phys ...