【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对象与数 ...
随机推荐
- 快读板子fread
struct ios { inline char read(){ <<|; static char buf[IN_LEN],*s,*t; ,IN_LEN,stdin)),s==t?-:*s ...
- 【MYSQL安装】mysql 5.6在centos6.4上的安装
1.卸载系统自带的mysql [root@zhangmeng ~]# rpm -qa |grep mysql mysql-libs--.el6_3.x86_64 [root@zhangmeng ~]# ...
- 关于nginx反向代理504 gateway time-out配置
问题描述: 使用nginx的默认配置用作后端处理服务的反向代理,针对处理时间超过1分钟的请求,返回504 gateway time-out,但后端服务还在执行中. 原因分析: nginx代理默认超时时 ...
- _INTSIZEOF
在_INTSIZEOF中该有的都有了 1.这其中最小非负剩余和最大正余数例子如下: 设n为4,当r为1时,最小非负剩余就是1,最大非正剩余就是1 - 4 = -3,最大正余数为4 - 1 = 3 2. ...
- Iterable/Iterator傻傻分不清
区别可迭代对象和迭代器 1.判断是否可以迭代 from collections import Iterabledef fid(times): n = 0 a , b = 0,1 while n < ...
- Python之requests的安装
在 windows 系统下,只需要输入命令 pip install requests ,即可安装. 在 linux 系统下,只需要输入命令 sudo pip install requests ,即可安 ...
- [C++]C++得到最大的int值
要得到最大的int值: 利用(unsigned int)-1,这样得到的就是unsigned int表示的最大值, int值只是比unsigned int多一位符号位,所以对(unsigned int ...
- css各种鼠标手型集合
比较齐全的鼠标手型css在国内的网站上是没搜到这么全的比如说哪个禁止的手型:鼠标往下移动即可看到效果: html代码如下: <h1>Cursors</h1> <div c ...
- jquery on函数和prop与attr区别
一.jquery on()方法 1.语法 2.例子 $(document).ready(function(){ $("p").on("click",functi ...
- ICPC 沈阳 Problem C
题意 求n的全排列中将前k个数排序后最长公共子序列>=n-1的个数 思考 我们先把最后可能产生的结果找出来,再找有多少种排列能构成这些结果 设排列为s S like 1,2,3,...,n , ...