app开发者平台在数字化时代的重要性与发展趋势解析
1091
2023-02-21
MyBatis 实现批量插入和删除中双层循环的写法案例
本博客主要用两个例子来说明一下批量删除和批量插入双层循环的用法,顺便自己记录一下,方便以后使用。
1、批量删除
(1):dao中的写法:
public int batchDelPrice(@Param("deleteList")List
其中deleteList是一个Map的集合,Map中的Object是一个list集合,deleteList拼接如下:
List
Map
deleteMap.put("userCode", userCode);
deleteMap.put("delete", deletePriceId);
deleteList.add(deleteMap);
(2):xml中的写法:
delete from xxx
where user_code = #{deleteItem.userCode}
and product_id in
#{item}
注意:批量删除操作,每个sql间是以分号间隔的,即最外层分隔符是separator=";"。
2、批量插入:
(1):dao中的写法:
public int batchAddPrice(@Param("addList")List
newAddList中的数据拼接如下:
List
for(int i = 0; i < addList.size(); i++){
Map
//获取thiWf需要增加的产品id集合
ListhiWft
List
//遍历产品id集合,取相应的产品默认价格,组装成一个新的产品+默认价格集合
for(int j = 0; j < priceIds.size(); j++){
Map
String priceId = priceIds.get(j);
//取相应产品id的默认价格
double defPrice = productDefPrice.get(Integer.valueOf(priceId)).get("defaulhttp://t_price");
priceMap.put("priceId", priceId);
priceMap.put("defPrice", defPrice);
priceList.add(priceMap);
}
userMap.put("priceList", priceList);
newAddList.add(userMap);
}
(2):xml中的写法:
insert into xxx(
user_code,product_id,price,efftime,index_num,pubtime
)values
(
#{addItem.userCode},#{priceItem.priceId},#{priceItem.defPrice},now(),1,now()
)
以上是批量插入和批量删除的其中一种写法,有用到双层循环的可以借鉴一下,有什么意见希望大家提出来。
此外。在使用过程中如果想让查询出的多条记录变成一个Map,想直接通过map.get(key)方式获取value的同学,可以参考下面的一个写法:
(1):dao中的写法:
@MapKey("product_id")
public Map
其中@MapKey中是你要当成查出的map的key值的字段名称,Map
(2):xml中的写法:
select product_id,default_price from xxx
希望对大家有所帮助。
补充:mybatis 两层循环的insert语句
使用这个insert语句可以在表名,字段名称和字段个数都不确定的情况下插入数据。
insert into ${table}(${lineColumn}) values
(
#{_value}
)
这thiWf个insert接收一个map)作为参数,其中放了,一个List,两个字符串。其中字符串分别是table(要插入的表名),lineColumn(列名)这在insert语句中都有用到。
第一层循环遍历List,其中存放的是一条条要插入数据库的数据,其中每条数据保存在一个map中。
第二层循环每次遍历一个从List中取出的map。
区分两个map,一个是作为参数的map,paramMap,里面有表名,字段名,LIst,一个是存放一行数据的map,dataMap
lineConlumn 是通过字符串拼接得到的。形如: 字段1,字段2,字段3
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~